Documentation ¶
Index ¶
- Variables
- func Contains(strs []string, key string) bool
- func MD5(strs ...string) string
- func SHA1(b []byte) []byte
- type Alipay
- func (alipay *Alipay) DoHttpGet(targetUrl string) ([]byte, error)
- func (a *Alipay) InitRSA(pubPath, priPath string) *Alipay
- func (a *Alipay) InstantCredit(outTradeNo, subject string, totalFee float64, extraParams map[string]string) (checkoutURL string, err error)
- func (a *Alipay) InstantCreditNotify(req *http.Request) (result *InstantCreditNotify, err error)
- func (a *Alipay) InstantCreditReturn(req *http.Request) (result *InstantCreditReturn, err error)
- func (a *Alipay) MobilePayment(outTradeNo, subject string, totalFee float64, notifyURL string, ...) (s string, err error)
- func (a *Alipay) MobilePaymentNotify(req *http.Request) (result *MobilePaymentNotify, err error)
- func (a *Alipay) QRCodePayment(outTradeNo, subject string, totalFee float64, notifyURL string) (s string, err error)
- func (a *Alipay) QRCodePaymentNotify(req *http.Request) (result *QRCodePaymentNotifyMap, err error)
- func (a *Alipay) Refund(batchNo string, detailDatas []RefundDetailData, notifyURL string) (refundURL string, err error)
- func (a *Alipay) RefundNotify(req *http.Request) (rnr *RefundNotifyResult, err error)
- type InstantCreditNotify
- type InstantCreditReturn
- type KVpair
- type KVpairs
- type MobilePaymentNotify
- type Params
- type QRCodePaymentNotifyMap
- type RefundDetailData
- type RefundNotifyResult
Constants ¶
This section is empty.
Variables ¶
var AlipayGateway = "https://mapi.alipay.com/gateway.do?"
var ErrNotFoundNotifyID = errors.New("not found notify_id")
var ErrNotifyDataIsEmpty = errors.New("notify data is empty")
var ErrReturnDataIsEmpty = errors.New("return data is empty")
var LogPrefix = "[Alipay]"
Functions ¶
Types ¶
type Alipay ¶
type Alipay struct {
// contains filtered or unexported fields
}
func NewPayment ¶
func (*Alipay) InstantCredit ¶
func (*Alipay) InstantCreditNotify ¶
func (a *Alipay) InstantCreditNotify(req *http.Request) (result *InstantCreditNotify, err error)
func (*Alipay) InstantCreditReturn ¶
func (a *Alipay) InstantCreditReturn(req *http.Request) (result *InstantCreditReturn, err error)
商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, 并判断total_fee是否确实为该订单的实际金额(即商户订单创建时的金额), 同时需要校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候, 一个商户可能有多个seller_id/seller_email), 上述有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。 在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。 在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 如果商户需要对同步返回的数据做验签,必须通过服务端的签名验签代码逻辑来实现。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。
交易状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功; 交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限; 交易成功之后,商户(高级即时到账或机票平台商)可调用批量退款接口,系统会发送退款通知给商户,具体内容请参见批量退款接口文档; 当商户使用站内退款时,系统会发送包含refund_status和gmt_refund字段的通知给商户。
func (*Alipay) MobilePayment ¶
func (*Alipay) MobilePaymentNotify ¶
func (a *Alipay) MobilePaymentNotify(req *http.Request) (result *MobilePaymentNotify, err error)
func (*Alipay) QRCodePayment ¶
func (*Alipay) QRCodePaymentNotify ¶
func (a *Alipay) QRCodePaymentNotify(req *http.Request) (result *QRCodePaymentNotifyMap, err error)
func (*Alipay) Refund ¶
func (a *Alipay) Refund(batchNo string, detailDatas []RefundDetailData, notifyURL string) (refundURL string, err error)
service 接口名称 String 接口名称。 不可空 refund_fastpay_by_platform_pwd partner 合作者身份ID String(16) 签约的支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。 不可空 2088101008267254 _input_charset 参数编码字符集 String 商户网站使用的编码格式,如utf-8、gbk、gb2312等。 不可空 GBK sign_type 签名方式 String DSA、RSA、MD5三个值可选,必须大写。 不可空 MD5 sign 签名 String 请参见签名。 不可空 tphoyf4aoio5e6zxoaydjevem2c1s1zo notify_url 服务器异步通知页面路径 String(200) 支付宝服务器主动通知商户网站里指定的页面http路径。 可空 http://api.test.alipay.net/atinterface/receive_notify.htm seller_email 卖家支付宝账号 String 如果卖家Id已填,则此字段可为空。 不可空 Jier1105@alitest.com seller_user_id 卖家用户ID String 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。登录时,seller_email和seller_user_id两者必填一个。如果两者都填,以seller_user_id为准。 不可空 2088101008267254 refund_date 退款请求时间 String 退款请求的当前时间。格式为:yyyy-MM-dd hh:mm:ss。 不可空 2011-01-12 11:21:00 batch_no 退款批次号 String 每进行一次即时到账批量退款,都需要提供一个批次号,通过该批次号可以查询这一批次的退款交易记录,对于每一个合作伙伴,传递的每一个批次号都必须保证唯一性。格式为:退款日期(8位)+流水号(3~24位)。不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”。 不可空 201101120001 batch_num 总笔数 String 即参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的最大数量为999个)。 不可空 1 detail_data 单笔数据集 String 退款请求的明细数据。格式详情参见下面的“单笔数据集参数说明”。 不可空 2011011201037066^5.00^协商退款
func (*Alipay) RefundNotify ¶
func (a *Alipay) RefundNotify(req *http.Request) (rnr *RefundNotifyResult, err error)
type InstantCreditNotify ¶
type InstantCreditNotify struct { NotifyTime string // 通知时间 Date 通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。 不可空 2009-08-12 11:08:32 NotifyType string // 通知类型 String 通知的类型。 不可空 trade_status_sync NotifyID string // 通知校验ID String 通知校验ID。 不可空 70fec0c2730b27528665af4517c27b95 SignType string // 签名方式 String DSA、RSA、MD5三个值可选,必须大写。 不可空 DSA Sign string // 签名 String 请参见签名验证。 不可空 _p_w_l_h_j0b_gd_aejia7n_ko4_m%2Fu_w_jd3_nx_s_k_mxus9_hoxg_y_r_lunli_pmma29_t_q%3D OutTradeNo string // 商户网站唯一订单号 String(64) 对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。 可空 3618810634349901 Subject string // 商品名称 String(256) 商品的标题/交易标题/订单标题/订单关键字等。它在支付宝的交易明细中排在第一列,对于财务对账尤为重要。是请求时对应的参数,原样通知回来。 可空 phone手机 PaymentType string // 支付类型 String(4) 取值范围请参见收款类型。 可空 1 TradeNo string // 支付宝交易号 String(64) 该交易在支付宝系统中的交易流水号。最长64位。 可空 2014040311001004370000361525 TradeStatus string // 交易状态 String 取值范围请参见交易状态。 可空 TRADE_FINISHED GMTCreate string // 交易创建时间 Date 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-22 20:49:31 GMTPayment string // 交易付款时间 Date 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-22 20:49:50 GMTClose string // 交易关闭时间 Date 交易关闭时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-22 20:49:46 RefundStatus string // 退款状态 String 取值范围请参见退款状态。 可空 REFUND_SUCCESS GMTRefund string // 退款时间 Date 卖家退款的时间,退款通知时会发送。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-29 19:38:25 SellerEmail string // 卖家支付宝账号 String(100) 卖家支付宝账号,可以是email和手机号码。 可空 chao.chenc1@alipay.com BuyerEmail string // 买家支付宝账号 String(100) 买家支付宝账号,可以是Email或手机号码。 可空 13758698870 SellerID string // 卖家支付宝账户号 String(30) 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088002007018916 BuyerID string // 买家支付宝账户号 String(30) 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088002007013600 Price float64 // 商品单价 Number 如果请求时使用的是total_fee,那么price等于total_fee;如果请求时使用的是price,那么对应请求时的price参数,原样通知回来。 可空 10.00 TotalFee float64 // 交易金额 Number 该笔订单的总金额。请求时对应的参数,原样通知回来。 可空 10.00 Quantity int64 // 购买数量 Number 如果请求时使用的是total_fee,那么quantity等于1;如果请求时使用的是quantity,那么对应请求时的quantity参数,原样通知回来。 可空 1 Body string // 商品描述 String(400) 该笔订单的备注、描述、明细等。对应请求时的body参数,原样通知回来。 可空 Hello Discount float64 // 折扣 Number 支付宝系统会把discount的值加到交易金额上,如果需要折扣,本参数为负数。 可空 -5 IsTotalFeeAdjust string // 是否调整总价 String(1) 该交易是否调整过价格。 可空 N UseCoupon string // 是否使用红包买家 String(1) 是否在交易过程中使用了红包。 可空 N ExtraCommonParam string // 公用回传参数 String 用于商户回传参数,该值不能包含“=”、“&”等特殊字符。如果用户请求时传递了该参数,则返回给商户时会回传该参数。 可空 你好,这是测试商户的广告。 OutChannelType string // 支付渠道组合信息 String 该笔交易所使用的支付渠道。格式为:渠道1|渠道2|…,如果有多个渠道,用“|”隔开。取值范围请参见渠道类型说明与币种列表。 可空 OPTIMIZED_MOTO|BALANCE OutChannelAmount string // 支付金额组合信息 String 该笔交易通过使用各支付渠道所支付的金额。格式为:金额1|金额2|…,如果有多个支付渠道,各渠道所支付金额用“|”隔开。 可空 90.00|10.00 OutChannelInst string // 实际支付渠道 String 该交易支付时实际使用的银行渠道。格式为:支付渠道1|支付渠道2|…,如果有多个支付渠道,用“|”隔开。取值范围请参见实际支付渠道列表。该参数需要联系支付宝开通。 可空 ICBC BusinessScene string // 是否扫码支付 String 回传给商户此标识为qrpay时,表示对应交易为扫码支付。目前只有qrpay一种回传值。非扫码支付方式下,目前不会返回该参数。 可空 qrpay }
type InstantCreditReturn ¶
type InstantCreditReturn struct { IsSuccess string // 成功标识 String(1) 表示接口调用是否成功,并不表明业务处理结果。 不可空 T SignType string // 签名方式 String DSA、RSA、MD5三个值可选,必须大写。 不可空 MD5 Sign string // 签名 String(32) 请参见签名验证 不可空 b1af584504b8e845ebe40b8e0e733729 OutTradeNo string // 商户网站唯一订单号 String(64) 对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。 可空 6402757654153618 Subject string // 商品名称 String(256) 商品的标题/交易标题/订单标题/订单关键字等。 可空 手套 PaymentType string // 支付类型 String(4) 对应请求时的payment_type参数,原样返回。 可空 1 Exterface string // 接口名称 String 标志调用哪个接口返回的链接。 可空 create_direct_pay_by_user TradeNo string // 支付宝交易号 String(64) 该交易在支付宝系统中的交易流水号。最长64位。 可空 2014040311001004370000361525 TradeStatus string // 交易状态 String 交易目前所处的状态。成功状态的值只有两个:TRADE_FINISHED(普通即时到账的交易成功状态);TRADE_SUCCESS(开通了高级即时到账或机票分销产品后的交易成功状态) 可空 TRADE_FINISHED NotifyID string // 通知校验ID String 支付宝通知校验ID,商户可以用这个流水号询问支付宝该条通知的合法性。 可空 RqPnCoPT3K9%2Fvwbh3I%2BODmZS9o4qChHwPWbaS7UMBJpUnBJlzg42y9A8gQlzU6m3fOhG NotifyTime string // 通知时间 Date 通知时间(支付宝时间)。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-23 13:17:39 NotifyType string // 通知类型 String 返回通知类型。 可空 trade_status_sync SellerEmail string // 卖家支付宝账号 String(100) 卖家支付宝账号,可以是Email或手机号码。 可空 chao.chenc1@alipay.com BuyerEmail string // 买家支付宝账号 String(100) 买家支付宝账号,可以是Email或手机号码。 可空 tstable01@alipay.com SellerID string // 卖家支付宝账户号 String(30) 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088002007018916 BuyerID string // 买家支付宝账户号 String(30) 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088101000082594 TotalFee float64 // 交易金额 Number 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 可空 10.00 Body string // 商品描述 String(400) 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。 可空 Hello ExtraCommonParam string // 公用回传参数 String 用于商户回传参数,该值不能包含“=”、“&”等特殊字符。如果用户请求时传递了该参数,则返回给商户时会回传该参数。 可空 你好,这是测试商户的广告。 AgentUserID string // 信用支付购票员的代理人ID String 本参数用于信用支付。它代表执行支付操作的操作员账号所属的代理人的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088101000071628 }
type MobilePaymentNotify ¶
type MobilePaymentNotify struct { NotifyTime string // notify_time 通知时间 Date 通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。 不可空 2013-08-22 14:45:24 NotifyType string // notify_type 通知类型 String 通知的类型。 不可空 trade_status_sync NotifyID string // notify_id 通知校验ID String 通知校验ID。 不可空 64ce1b6ab92d00ede0ee56ade98fdf2f4c SignType string // sign_type 签名方式 String 固定取值为RSA。 不可空 RSA Sign string // sign 签名 String 请参见签名机制。 不可空 lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJI OutTradeNo string // out_trade_no 商户网站唯一订单号 String(64) 对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。 可空 082215222612710 Subject string // subject 商品名称 String(128) 商品的标题/交易标题/订单标题/订单关键字等。它在支付宝的交易明细中排在第一列,对于财务对账尤为重要。是请求时对应的参数,原样通知回来。 可空 测试 PaymentType string // payment_type 支付类型 String(4) 支付类型。默认值为:1(商品购买)。 可空 1 TradeNo string // trade_no 支付宝交易号 String(64) 该交易在支付宝系统中的交易流水号。最短16位,最长64位。 不可空 2013082244524842 TradeStatus string // trade_status 交易状态 String 交易状态,取值范围请参见“交易状态”。 不可空 TRADE_SUCCESS SellerID string // seller_id 卖家支付宝用户号 String(30) 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 不可空 2088501624816263 SellerEmail string // seller_email 卖家支付宝账号 String(100) 卖家支付宝账号,可以是email和手机号码。 不可空 xxx@alipay.com BuyerID string // buyer_id 买家支付宝用户号 String(30) 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 不可空 2088602315385429 BuyerEmail string // buyer_email 买家支付宝账号 String(100) 买家支付宝账号,可以是Email或手机号码。 不可空 dlwdgl@gmail.com TotalFee float64 // total_fee 交易金额 Number 该笔订单的总金额。请求时对应的参数,原样通知回来。 不可空 1.00 Quantity int64 // quantity 购买数量 Number 购买数量,固定取值为1(请求时使用的是total_fee)。 可空 1 Price float64 // price 商品单价 Number price等于total_fee(请求时使用的是total_fee)。 可空 1.00 Body string // body 商品描述 String(512) 该笔订单的备注、描述、明细等。对应请求时的body参数,原样通知回来。 可空 测试测试 GMTCreate string // gmt_create 交易创建时间 Date 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2013-08-22 14:45:23 GMTPayment string // gmt_payment 交易付款时间 Date 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2013-08-22 14:45:24 IsTotalFeeAdjust string // is_total_fee_adjust 是否调整总价 String(1) 该交易是否调整过价格。 可空 N UseCoupon string // use_coupon 是否使用红包买家 String(1) 是否在交易过程中使用了红包。 可空 N Discount float64 // discount 折扣 String 支付宝系统会把discount的值加到交易金额上,如果有折扣,本参数为负数,单位为元。 可空 0.00 RefundStatus string // refund_status 退款状态 String 取值范围请参见“退款状态”。 可空 REFUND_SUCCESS GMTRefund string // gmt_refund 退款时间 Date 卖家退款的时间,退款通知时会发送。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-29 19:38:25 }
type Params ¶
func ParseParams ¶
type QRCodePaymentNotifyMap ¶
type QRCodePaymentNotifyMap struct { NotifyTime string // notify_time 通知时间 Date 通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。 不可空 2013-08-22 14:45:24 NotifyType string // notify_type 通知类型 String 通知的类型。 不可空 trade_status_sync NotifyID string // notify_id 通知校验ID String 通知校验ID。 不可空 64ce1b6ab92d00ede0ee56ade98fdf2f4c SignType string // sign_type 签名方式 String 固定取值为RSA。 不可空 RSA Sign string // sign 签名 String 请参见签名机制。 不可空 lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJI OutTradeNo string // out_trade_no 商户网站唯一订单号 String(64) 对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。 可空 082215222612710 Subject string // subject 商品名称 String(128) 商品的标题/交易标题/订单标题/订单关键字等。它在支付宝的交易明细中排在第一列,对于财务对账尤为重要。是请求时对应的参数,原样通知回来。 可空 测试 PaymentType string // payment_type 支付类型 String(4) 支付类型。默认值为:1(商品购买)。 可空 1 TradeNo string // trade_no 支付宝交易号 String(64) 该交易在支付宝系统中的交易流水号。最短16位,最长64位。 不可空 2013082244524842 TradeStatus string // trade_status 交易状态 String 交易状态,取值范围请参见“交易状态”。 不可空 TRADE_SUCCESS SellerID string // seller_id 卖家支付宝用户号 String(30) 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 不可空 2088501624816263 SellerEmail string // seller_email 卖家支付宝账号 String(100) 卖家支付宝账号,可以是email和手机号码。 不可空 xxx@alipay.com BuyerID string // buyer_id 买家支付宝用户号 String(30) 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 不可空 2088602315385429 BuyerEmail string // buyer_email 买家支付宝账号 String(100) 买家支付宝账号,可以是Email或手机号码。 不可空 dlwdgl@gmail.com TotalFee float64 // total_fee 交易金额 Number 该笔订单的总金额。请求时对应的参数,原样通知回来。 不可空 1.00 Quantity int64 // quantity 购买数量 Number 购买数量,固定取值为1(请求时使用的是total_fee)。 可空 1 Price float64 // price 商品单价 Number price等于total_fee(请求时使用的是total_fee)。 可空 1.00 Body string // body 商品描述 String(512) 该笔订单的备注、描述、明细等。对应请求时的body参数,原样通知回来。 可空 测试测试 GMTCreate string // gmt_create 交易创建时间 Date 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2013-08-22 14:45:23 GMTPayment string // gmt_payment 交易付款时间 Date 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2013-08-22 14:45:24 IsTotalFeeAdjust string // is_total_fee_adjust 是否调整总价 String(1) 该交易是否调整过价格。 可空 N UseCoupon string // use_coupon 是否使用红包买家 String(1) 是否在交易过程中使用了红包。 可空 N Discount float64 // discount 折扣 String 支付宝系统会把discount的值加到交易金额上,如果有折扣,本参数为负数,单位为元。 可空 0.00 RefundStatus string // refund_status 退款状态 String 取值范围请参见“退款状态”。 可空 REFUND_SUCCESS GMTRefund string // gmt_refund 退款时间 Date 卖家退款的时间,退款通知时会发送。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-29 19:38:25 }
type RefundDetailData ¶
type RefundNotifyResult ¶
type RefundNotifyResult struct { NotifyTime string // 通知时间 Date 通知发送的时间。格式为:yyyy-MM-dd HH:mm:ss。 不可空 2009-08-12 11:08:32 NotifyType string // 通知类型 String 通知的类型。 不可空 batch_refund_notify NotifyID string // 通知校验ID String 通知校验ID。 不可空 70fec0c2730b27528665af4517c27b95 SignType string // 签名方式 String DSA、RSA、MD5三个值可选,必须大写。 不可空 MD5 Sign string // 签名 String 请参见签名验证。 不可空 b7baf9af3c91b37bef4261849aa76281 BatchNo string // 退款批次号 String 原请求退款批次号。 不可空 20060702001 SuccessNum string // 退款成功总数 String 退交易成功的笔数。0<= success_num<= 总退款笔数。 不可空 2 ResultDetails string // 退款结果明细 String 退款结果明细:退手续费结果返回格式:交易号^退款金额^处理结果\$退费账号^退费账户ID^退费金额^处理结果;不退手续费结果返回格式:交易号^退款金额^处理结果。若退款申请提交成功,处理结果会返回“SUCCESS”。若提交失败,退款的处理结果中会有报错码,参见即时到账批量退款业务错误码。 可空 2010031906272929^80^SUCCESS$jax_chuanhang@alipay.com^2088101003147483^0.01^SUCCESS }