AliPay SDK for Golang
感谢 @wusphinx 和 @clearluo 对本项目的支持。
-
手机网站支付接口
alipay.trade.wap.pay
-
电脑网站支付
alipay.trade.page.pay
-
统一收单线下交易查询
alipay.trade.query
-
统一收单交易支付接口
alipay.trade.pay
-
统一收单交易关闭接口
alipay.trade.close
-
统一收单交易退款接口
alipay.trade.refund
-
App支付接口
alipay.trade.app.pay
-
统一收单交易退款查询
alipay.trade.fastpay.refund.query
-
单笔转账到支付宝账户接口
alipay.fund.trans.toaccount.transfer
-
查询转账订单接口
alipay.fund.trans.order.query
-
通知内容转换及签名验证
将支付宝的通知内容转换为 Golang 的结构体,并且验证其合法性。
从支付宝开放平台申请创建相关的应用,使用自己的支付宝账号登录即可。
支付宝开放平台为每一个应用提供了沙箱环境,供开发人员开发测试使用。
沙箱环境是独立的,每一个应用都会有一个商家账号和买家账号。
参考官网文档 进行应用的配置。
本 SDK 中的签名方法为 RSA2,所以请注意配置 RSA2(SHA256)密钥。
请参考 如何生成 RSA 密钥。
var client = alipay.New(appId, partnerId, publickKey, privateKey, false)
var p = AliPayTradeWapPay{}
p.NotifyURL = "xxx"
p.Subject = "标题"
p.OutTradeNo = "传递一个唯一单号"
p.TotalAmount = "10.00"
p.ProductCode = "商品编码"
var url, _ = client.TradeWapPay(p)
// 直接访问该 URL 就可以了
支持自动对支付宝返回的数据进行签名验证,详细信息请参考自行实现验签.
如果需要开启自动验签,只需要在初始化 AliPay 对象之后给 AliPayPublicKey 属性设置从支付宝管理后台获取到的支付宝公钥即可,如下:
var client = alipay.New(appId, partnerId, publickKey, privateKey, false)
client.AliPayPublicKey = xxx // 从支付宝管理后台获取支付宝提供的公钥
有支付或者其它动作发生后,支付宝服务器会调用我们提供的 Notify URL,并向其传递会相关的信息。参考手机网站支付结果异步通知。
我们需要在提供的 Notify URL 服务中获取相关的参数并进行验证:
var client = alipay.New(appId, partnerId, publickKey, privateKey, false)
client.AliPayPublicKey = xxx // 从支付宝管理后台获取支付宝提供的公钥
http.HandleFunc("/alipay", func(rep http.ResponseWriter, req *http.Request) {
var noti, _ = client.GetTradeNotification(req)
if noti != nil {
fmt.Println("支付成功")
} else {
fmt.Println("支付失败")
}
})
此验证方法适用于支付宝所有情况下发送的 Notify,不管是手机 App 支付还是 Wap 支付。
需要特别注意,从支付宝后台获取到支付宝的公钥之后,需要将其转换成标准的公钥格式,如下所示:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2MhEVUp+rRRyAD9HZfiS
g8LLxRAX18XOMJE8/MNnlSSTWCCoHnM+FIU+AfB+8FE+gGIJYXJlpTIyWn4VUMte
wh/4C8uwzBWod/3ilw9Uy7lFblXDBd8En8a59AxC6c9YL1nWD7/sh1szqej31VRI
2OXQSYgvhWNGjzw2/KS1GdrWmdsVP2hOiKVy6TNtH7XnCSRfBBCQ+LgqO1tE0NHD
DswRwBLAFmIlfZ//qZ+a8FvMc//sUm+CV78pQba4nnzsmh10fzVVFIWiKw3VDsxX
PRrAtOJCwNsBwbvMuI/ictvxxjUl4nBZDw4lXt5eWWqBrnTSzogFNOk06aNmEBTU
hwIDAQAB
-----END PUBLIC KEY-----