unionpay

package module
v0.0.0-...-22f2465 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 25, 2019 License: Apache-2.0 Imports: 21 Imported by: 0

README

unionpay

银联支付相关API封装 Golang实现

快速开始

获取安装
go get -u github.com/shima-park/unionpay
推荐使用localtunnel测试回调通知

可以先安装一个localtunnel 可以方便快捷的实现你的本地web服务通过外网访问,无需修改DNS和防火墙设置

$ npm install -g localtunnel

示例

通过localtunnel获取外网地址:
$ lt --port 9090
your url is: http://eygytquvvu.localtunnel.me
修改示例代码中的配置:

记得修改示例中的对应的pub, pri, cert, mchID配置 项目目录下已经存在银联的测试相关的公钥密钥以及证书 要注意的是go run main.go的时候取的是当前运行目录路径。 如果在example下运行该命令会导致找不到公钥密钥及证书

var (
    pub   = "key.cert" //加密密钥路径(openssl pkcs12 -in PM_700000000000001_acp.pfx -clcerts -nokeys -out key.cert)
	pri   = "key.pem"  //加密证书路径(openssl pkcs12 -in PM_700000000000001_acp.pfx -nocerts -nodes -out key.pem)
	cert  = "acp_test_verify_sign_new.cer"
	mchID = "700000000000001"

    // 默认调用银联正式环境的地址,访问银联测试环境调用 SetTestEnv(true)
	up = unionpay.NewPayment(mchID, pub, pri, cert).SetTestEnv(true)

    // 示例监听的端口
	port = ":9090"

    // 通过 lt --port 9090 获取的外网地址
	localTunnel = "http://eqfssupbgz.localtunnel.me"
    ...
)
启动示例程序:
$ go run example/main.go
在浏览器中访问本地服务:

http://localhost:9090/index

具体如何使用请查看example/main.go

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNotifyDataIsEmpty = errors.New("notify data is empty")

Functions

func Contains

func Contains(strs []string, key string) bool

func MD5

func MD5(strs ...string) string

func SHA1

func SHA1(b []byte) []byte

Types

type ConsumeQueryResponse

type ConsumeQueryResponse struct {
	Version            string
	Encoding           string
	CertID             string
	Signature          string
	SignMethod         string
	TxnType            string
	TxnSubType         string
	AccessType         string
	MerID              string
	OrderID            string
	TxnTime            string
	PayType            string
	CurrencyCode       string
	AccNo              string
	PayCardType        string
	TxnAmt             string // 长度为1到12字节的变长整型数值,以分为单位
	ReqReserved        string
	Reserved           string
	IssuerIdentifyMode string
	QueryID            string
	TraceNo            string
	TraceTime          string
	SettleDate         string
	SettleCurrencyCode string
	SettleAmt          string
	OrigRespCode       string
	OrigRespMsg        string
	RespCode           string
	RespMsg            string
}

type ConsumeRefundNotifyResponse

type ConsumeRefundNotifyResponse struct {
	Version            string
	Encoding           string
	CertID             string
	Signature          string
	SignMethod         string
	TxnType            string
	TxnSubType         string
	BizType            string
	AccessType         string
	MerID              string
	OrderID            string
	TxnTime            string
	CurrencyCode       string
	TxnAmt             string // 长度为1到12字节的变长整型数值,以分为单位
	ReqReserved        string
	Reserved           string
	QueryID            string
	OrigQryID          string
	TraceNo            string
	TraceTime          string
	SettleDate         string
	SettleCurrencyCode string
	SettleAmt          string
	RespCode           string
	RespMsg            string
}

type ConsumeRefundResponse

type ConsumeRefundResponse struct {
	Version     string
	Encoding    string
	CertID      string
	Signature   string
	SignMethod  string
	TxnType     string
	TxnSubType  string
	BizType     string
	AccessType  string
	MerID       string
	OrderID     string
	TxnTime     string
	TxnAmt      string // 长度为1到12字节的变长整型数值,以分为单位
	ReqReserved string
	Reserved    string
	QueryID     string
	OrigQryID   string
	RespCode    string
	RespMsg     string
}

type ConsumeUndoNotifyResponse

type ConsumeUndoNotifyResponse struct {
	Version            string
	Encoding           string
	CertID             string
	Signature          string
	SignMethod         string
	TxnType            string
	TxnSubType         string
	BizType            string
	AccessType         string
	MerID              string
	OrderID            string
	TxnTime            string
	CurrencyCode       string
	TxnAmt             string // 长度为1到12字节的变长整型数值,以分为单位
	ReqReserved        string
	Reserved           string
	QueryID            string
	OrigQryID          string
	TraceNo            string
	TraceTime          string
	SettleDate         string
	SettleCurrencyCode string
	SettleAmt          string
	RespCode           string
	RespMsg            string
}

type ConsumeUndoResponse

type ConsumeUndoResponse struct {
	Version     string
	Encoding    string
	CertID      string
	Signature   string
	SignMethod  string
	TxnType     string
	TxnSubType  string
	BizType     string
	AccessType  string
	MerID       string
	OrderID     string
	TxnTime     string
	TxnAmt      string // 长度为1到12字节的变长整型数值,以分为单位
	ReqReserved string
	Reserved    string
	QueryID     string
	OrigQryID   string
	RespCode    string
	RespMsg     string
}

type FrontConsumeNotifyResponse

type FrontConsumeNotifyResponse struct {
	Version            string // 版本号 R
	Encoding           string // 编码方式 R
	CertID             string // 证书id  M
	Signature          string // 签名 M
	SignMethod         string // 签名方式 M
	TxnType            string // 交易类型 R
	TxnSubType         string // 交易子类 R
	BizType            string // 产品类型 R
	AccessType         string // 接入类型 R
	MerID              string // 商户代码 R
	OrderID            string // 商户订单号 R
	TxnTime            string // 订单发送时间 R
	TxnAmt             string // 交易金额 R
	CurrencyCode       string // 交易币种 R
	ReqReserved        string // 请求方保留域 R
	Reserved           string // 保留域 O
	QueryID            string // 交易查询流水号 M 消费交易的流水号,供后续查询用
	RespCode           string // 响应码 M
	RespMsg            string // 响应消息 M
	SettleAmt          string // 清算金额 M
	SettleCurrencyCode string // 清算币种 M
	SettleDate         string // 清算日期 M
	TraceNo            string // 系统跟踪号 M
	TraceTime          string // 交易传输时间 M
	ExchangeDate       string // 兑换日期 C 境外交易时返回
	ExchangeRate       string // 汇率 C 境外交易时返回
	AccNo              string // 账号 C 根据商户配置返回
	PayCardType        string // 支付卡类型 根据商户配置返回
	PayType            string // 支付方式 C 根据商户配置返回
	PayCardNo          string // 支付卡标示 C 移动支付交易时,根据商户配置返回
	PayCardIssueName   string // 支付卡名称 C 移动支付交易时,根据商户配置返回
	BindID             string // 绑定标示号 R 绑定支付时,根据商户配置返回
}

type FrontConsumeReturnResponse

type FrontConsumeReturnResponse struct {
	Version            string // 版本号 R
	Encoding           string // 编码方式 R
	CertID             string // 证书id  M
	Signature          string // 签名 M
	SignMethod         string // 签名方式 M
	TxnType            string // 交易类型 R
	TxnSubType         string // 交易子类 R
	BizType            string // 产品类型 R
	AccessType         string // 接入类型 R
	MerID              string // 商户代码 R
	OrderID            string // 商户订单号 R
	TxnTime            string // 订单发送时间 R
	TxnAmt             string // 交易金额 R
	CurrencyCode       string // 交易币种 R
	ReqReserved        string // 请求方保留域 R
	Reserved           string // 保留域 O
	QueryID            string // 交易查询流水号 M 消费交易的流水号,供后续查询用
	RespCode           string // 响应码 M
	RespMsg            string // 响应消息 M
	AccNo              string // 账号 C 根据商户配置返回
	PayCardType        string // 支付卡类型 C 根据商户配置返回
	PayType            string // 支付方式 C 根据商户配置返回
	TN                 string // 银联订单号 C 商户推送订单后银联移动支付系统返回该流水号,商户调用支付控件时使用
	TraceNo            string // 系统跟踪号
	TraceTime          string // 交易传输时间
	SettleDate         string // 清算日期
	SettleCurrencyCode string // 清算货币
	SettleAmt          string // 清算金额
	ExchangeRate       string // 汇率 C 境外交易时返回
}

type KVpair

type KVpair struct {
	K, V string
}

type KVpairs

type KVpairs []KVpair

func GenKVpairs

func GenKVpairs(paramsKeyMap map[string]bool, initParams map[string]string, skipKey ...string) (kvs KVpairs, err error)

func (KVpairs) Join

func (t KVpairs) Join(sep string) string

func (KVpairs) Len

func (t KVpairs) Len() int

func (KVpairs) Less

func (t KVpairs) Less(i, j int) bool

func (KVpairs) RemoveEmpty

func (t KVpairs) RemoveEmpty() KVpairs

func (KVpairs) Sort

func (t KVpairs) Sort() KVpairs

func (KVpairs) Swap

func (t KVpairs) Swap(i, j int)

type MobilePaymentNotifyResponse

type MobilePaymentNotifyResponse struct {
	Version    string //  1	版本号	version	NS5	R	固定填写5.0.0
	Encoding   string //  2	编码方式	encoding	ANS1..20	R	填写报文使用的字符编码,支持UTF-8与GBK编码
	CertID     string //  3	证书ID	certId	N1..128	M	填写签名私钥证书的Serial Number,该值可通过SDK获取
	SignMethod string //  4	签名方法	signMethod	N1..12	M	01:表示采用RSA
	Signature  string //  5	签名	signature	ANS1..1024	M	填写对报文摘要的签名,可通过SDK生成签名
	TxnType    string //  6	交易类型	txnType	N2	R	取值:  00:查询交易,01:消费,02:预授权,03:预授权完成,04:退货,05:圈存,11:代收,12:代付,13:账单支付,14:转账(保留),21:批量交易,22:批量查询,31:消费撤销,32:预授权撤销,33:预授权完成撤销,71:余额查询,72:实名认证-建立绑定关系,73:账单查询,74:解除绑定关系,75:查询绑定关系,77:发送短信验证码交易,78:开通查询交易,79:开通交易,94:IC卡脚本通知
	TxnSubType string //  7	交易子类	txnSubType	N2	R	依据实际交易类型填写。
	BizType    string //  8	产品类型	bizType	N6	R	取值:000101:基金业务之股票基金;000102:基金业务之货币基金;000201:B2C网关支付;000301:无跳转(商户侧);000302:评级支付;000401:代付;000501:代收;000601:账单支付;000801:无跳转(机构侧);000901:绑定支付;000902: Token支付;001001:订购;000202:B2B
	//  除以上产品外其他接口默认送000000,对账文件下载接口必送000000
	//  商户信息
	AccessType string //  1	接入类型	accessType	N1	R	0:商户直连接入1:收单机构接入
	MerID      string //  2	商户代码	merId	AN15	R	已被批准加入银联互联网系统的商户代码
	//  订单信息
	OrderID      string //  1	商户订单号	orderId	AN8..32	R	商户订单号,仅能用大小写字母与数字,不能用特殊字符
	CurrencyCode string //  2	交易币种	currencyCode	AN3	M	币种格式必须为3位代码,境内客户取值:156(人民币)	默认为156
	TxnAmt       string //  3	交易金额	txnAmt	N1..12	R	单位为分,不能带小数点,样例:1元送100
	TxnTime      string //  4	订单发送时间	txnTime	YYYYMMDDHHmmss	R	必须使用当前北京时间(年年年年月月日日时时分分秒秒)24小时制,样例:20151123152540,北京时间
	PayType      string //  5	支付方式	payType	N4	C	默认不返回此域,如需要返此域,需要提交申请,视商户配置返回,可在消费类交易中返回以下中的一种: 0001:认证支付 0002:快捷支付 0004:储值卡支付 0005:IC卡支付 0201:网银支付 1001:牡丹畅通卡支付 1002:中铁银通卡支付 0401:信用卡支付——暂定 0402:小额临时支付 0403:认证支付2.0 0404:互联网订单手机支付 9000:其他无卡支付(如手机客户端支付)	根据商户配置返回
	AccNo        string //  6	账号	accNo	AN1..512	C	银行卡号。请求时使用加密公钥对交易账号加密,并做Base64编码后上送;应答时如需返回,则使用签名私钥进行解密。前台交易可由银联页面采集,也可由商户上送并返显,如需锁定返显卡号,应通过保留域(reserved)上送卡号锁定标识。	根据商户配置返回
	PayCardType  string //  7	支付卡类型	payCardType	N2	C	消费交易,视商户配置返回。该域取值为: 00:未知 01:借记账户 02:贷记账户 03:准贷记账户 04:借贷合一账户 05:预付费账户 06:半开放预付费账户	根据商户配置返回
	ReqReserved  string //  8	请求方自定义域	reqReserved	ANS1..1024	R	商户自定义保留域,交易应答时会原样返回
	Reserved     string //  9	保留域	reserved	ANS1..2048	O	保留域包含多个子域,所有子域需用“{}”包含,子域间以“&”符号链接。
	//  格式如下:{子域名1=值&子域名2=值&子域名3=值}。
	//  通知信息
	QueryID            string //  1	查询流水号	queryId	AN21	M	由银联返回,用于在后续类交易中唯一标识一笔交易	消费交易的流水号,供后续查询用
	TraceNO            string //  2	系统跟踪号	traceNo	N6	M	收单机构对账时使用,该域由银联系统产生
	TraceTime          string //  3	交易传输时间	traceTime	MMDDHHmmss	M	(月月日日时时分分秒秒)24小时制收单机构对账时使用,该域由银联系统产生
	SettleDate         string //  4	清算日期	settleDate	MMDD	M	为银联和入网机构间的交易结算日期。一般前一日23点至当天23点为一个清算日。也就是23点前的交易,当天23点之后开始结算,23点之后的交易,要第二天23点之后才会结算。测试环境为测试需要,13:30左右日切,所以13:30到13:30为一个清算日,测试环境今天下午为今天的日期,今天上午为昨天的日期。
	SettleCurrencyCode string //  5	清算币种	settleCurrencyCode	AN3	M	境内返回156
	SettleAmt          string //  6	清算金额	settleAmt	N1..12	M	取值同交易金额
	RespCode           string //  7	应答码	respCode	AN2	M	具体参见应答码定义章节
	RespMsg            string //  8	应答信息	respMsg	ANS1..256	M	填写具体的应答信息
	PayCardNo          string //  9	支付卡标识	payCardNo	ANS1..19	C	移动支付交易时,根据客户配置返回	业务运营中心开启此字段权时,此字段会返回打码卡号。
	PayCardIssueName   string //  10	支付卡名称	payCardIssueName	ANS1..64	C	移动支付交易时,根据客户配置返回	业务运营中心开启此字段权时,此字段会返回支付卡中文名称。
}

type MobilePaymentResponse

type MobilePaymentResponse struct {
	Version     string
	Encoding    string
	CertID      string
	SignMethod  string
	Signature   string
	TxnType     string
	TxnSubType  string
	BizType     string
	AccessType  string
	MerID       string
	OrderID     string
	TxnTime     string
	ReqReserved string
	Reserved    string
	RespCode    string
	RespMsg     string
	TN          string
}

type UnionPay

type UnionPay struct {
	// contains filtered or unexported fields
}

func NewPayment

func NewPayment(mchID, pubPath, priPath, certPath string) (up *UnionPay)

func (*UnionPay) ConsumeQuery

func (up *UnionPay) ConsumeQuery(orderID, queryID, txnTime, reserved string) (resp *ConsumeQueryResponse, err error)

func (*UnionPay) ConsumeRefund

func (up *UnionPay) ConsumeRefund(orderID, returnURL string, amount int64, originQueryID, reqReserved, reserved string) (resp *ConsumeRefundResponse, err error)

func (*UnionPay) ConsumeRefundNotify

func (up *UnionPay) ConsumeRefundNotify(req *http.Request) (resp *ConsumeRefundNotifyResponse, err error)

func (*UnionPay) ConsumeUndo

func (up *UnionPay) ConsumeUndo(orderID, returnURL string, amount int64, originQueryID, reqReserved, reserved string) (resp *ConsumeUndoResponse, err error)

func (*UnionPay) ConsumeUndoNotify

func (up *UnionPay) ConsumeUndoNotify(req *http.Request) (resp *ConsumeUndoNotifyResponse, err error)

func (*UnionPay) FrontConsume

func (up *UnionPay) FrontConsume(orderID string, amount int64, returnURL, notifyURL string, extraParams map[string]string) (html string, err error)

func (*UnionPay) FrontConsumeNotify

func (up *UnionPay) FrontConsumeNotify(req *http.Request) (resp *FrontConsumeNotifyResponse, err error)

func (*UnionPay) FrontConsumeReturn

func (up *UnionPay) FrontConsumeReturn(req *http.Request) (resp *FrontConsumeReturnResponse, err error)

func (*UnionPay) MobilePayment

func (up *UnionPay) MobilePayment(orderID string, amount int64, notifyURL string, extraParams map[string]string) (resp *MobilePaymentResponse, err error)

func (*UnionPay) MobilePaymentNotify

func (up *UnionPay) MobilePaymentNotify(req *http.Request) (resp *MobilePaymentNotifyResponse, err error)

func (*UnionPay) SetTestEnv

func (up *UnionPay) SetTestEnv(b bool) *UnionPay

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL