|
@@ -3,7 +3,6 @@
|
|
|
|
|
|
|
|
# GoPay
|
|
# GoPay
|
|
|
|
|
|
|
|
-[English Document](https://github.com/iGoogle-ink/gopay/blob/master/README_EN.md)
|
|
|
|
|
|
|
|
|
|
微信和支付宝的Golang版本SDK
|
|
微信和支付宝的Golang版本SDK
|
|
|
|
|
|
|
@@ -14,9 +13,17 @@
|
|
|

|
|

|
|
|

|
|

|
|
|
|
|
|
|
|
-### 微信Client
|
|
|
|
|
|
|
+### 微信 Client
|
|
|
|
|
|
|
|
-* client := gopay.NewWeChatClient() => 初始化微信支付客户端
|
|
|
|
|
|
|
+* wechat.NewClient() => 初始化微信支付客户端
|
|
|
|
|
+
|
|
|
|
|
+```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/wechat"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+client := wechat.NewClient()
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
### 微信支付API
|
|
### 微信支付API
|
|
|
|
|
|
|
@@ -38,67 +45,76 @@
|
|
|
|
|
|
|
|
### 微信公共API
|
|
### 微信公共API
|
|
|
|
|
|
|
|
-* gopay.GetWeChatParamSign() => 获取微信支付所需参数里的Sign值(通过支付参数计算Sign值)
|
|
|
|
|
-* gopay.GetWeChatSanBoxParamSign() => 获取微信支付沙箱环境所需参数里的Sign值(通过支付参数计算Sign值)
|
|
|
|
|
-* gopay.GetMiniPaySign() => 获取微信小程序支付所需要的paySign
|
|
|
|
|
-* gopay.GetH5PaySign() => 获取微信内H5支付所需要的paySign
|
|
|
|
|
-* gopay.GetAppPaySign() => 获取APP支付所需要的paySign
|
|
|
|
|
-* gopay.ParseWeChatNotifyResultToBodyMap() => 解析微信支付异步通知的参数到BodyMap
|
|
|
|
|
-* gopay.ParseWeChatNotifyResult() => 解析微信支付异步通知的参数
|
|
|
|
|
-* gopay.ParseWeChatRefundNotifyResult() => 解析微信退款异步通知的参数
|
|
|
|
|
-* gopay.VerifyWeChatSign() => 微信同步返回参数验签或异步通知参数验签
|
|
|
|
|
-* gopay.Code2Session() => 登录凭证校验:获取微信用户OpenId、UnionId、SessionKey
|
|
|
|
|
-* gopay.GetWeChatAppletAccessToken() => 获取微信小程序全局唯一后台接口调用凭据
|
|
|
|
|
-* gopay.GetWeChatAppletPaidUnionId() => 微信小程序用户支付完成后,获取该用户的 UnionId,无需用户授权
|
|
|
|
|
-* gopay.GetWeChatUserInfo() => 微信公众号:获取用户基本信息(UnionID机制)
|
|
|
|
|
-* gopay.DecryptWeChatOpenDataToStruct() => 加密数据,解密到指定结构体
|
|
|
|
|
-* gopay.DecryptWeChatOpenDataToBodyMap() => 加密数据,解密到 BodyMap
|
|
|
|
|
-* gopay.GetOpenIdByAuthCode() => 授权码查询openid
|
|
|
|
|
-* gopay.GetAppWeChatLoginAccessToken() => App应用微信第三方登录,code换取access_token
|
|
|
|
|
-* gopay.RefreshAppWeChatLoginAccessToken() => 刷新App应用微信第三方登录后,获取的 access_token
|
|
|
|
|
-* gopay.DecryptRefundNotifyReqInfo() => 解密微信退款异步通知的加密数据
|
|
|
|
|
|
|
+* wechat.GetParamSign() => 获取微信支付所需参数里的Sign值(通过支付参数计算Sign值)
|
|
|
|
|
+* wechat.GetSanBoxParamSign() => 获取微信支付沙箱环境所需参数里的Sign值(通过支付参数计算Sign值)
|
|
|
|
|
+* wechat.GetMiniPaySign() => 获取微信小程序支付所需要的paySign
|
|
|
|
|
+* wechat.GetH5PaySign() => 获取微信内H5支付所需要的paySign
|
|
|
|
|
+* wechat.GetAppPaySign() => 获取APP支付所需要的paySign
|
|
|
|
|
+* wechat.ParseNotifyResultToBodyMap() => 解析微信支付异步通知的参数到BodyMap
|
|
|
|
|
+* wechat.ParseNotifyResult() => 解析微信支付异步通知的参数
|
|
|
|
|
+* wechat.ParseRefundNotifyResult() => 解析微信退款异步通知的参数
|
|
|
|
|
+* wechat.VerifySign() => 微信同步返回参数验签或异步通知参数验签
|
|
|
|
|
+* wechat.Code2Session() => 登录凭证校验:获取微信用户OpenId、UnionId、SessionKey
|
|
|
|
|
+* wechat.GetAppletAccessToken() => 获取微信小程序全局唯一后台接口调用凭据
|
|
|
|
|
+* wechat.GetAppletPaidUnionId() => 微信小程序用户支付完成后,获取该用户的 UnionId,无需用户授权
|
|
|
|
|
+* wechat.GetUserInfo() => 微信公众号:获取用户基本信息(UnionID机制)
|
|
|
|
|
+* wechat.DecryptOpenDataToStruct() => 加密数据,解密到指定结构体
|
|
|
|
|
+* wechat.DecryptOpenDataToBodyMap() => 加密数据,解密到 BodyMap
|
|
|
|
|
+* wechat.GetOpenIdByAuthCode() => 授权码查询openid
|
|
|
|
|
+* wechat.GetAppLoginAccessToken() => App应用微信第三方登录,code换取access_token
|
|
|
|
|
+* wechat.RefreshAppLoginAccessToken() => 刷新App应用微信第三方登录后,获取的 access_token
|
|
|
|
|
+* wechat.DecryptRefundNotifyReqInfo() => 解密微信退款异步通知的加密数据
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
|
-### 支付宝Client
|
|
|
|
|
|
|
+### 支付宝 Client
|
|
|
|
|
+
|
|
|
|
|
+* client := alipay.NewClient() => 初始化支付宝支付客户端
|
|
|
|
|
|
|
|
-* client := gopay.NewAliPayClient() => 初始化支付宝支付客户端
|
|
|
|
|
|
|
+```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/alipay"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+client := alipay.NewClient()
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
### 支付宝支付API
|
|
### 支付宝支付API
|
|
|
|
|
|
|
|
-* 手机网站支付接口2.0(手机网站支付):client.AliPayTradeWapPay()
|
|
|
|
|
-* 统一收单下单并支付页面接口(电脑网站支付):client.AliPayTradePagePay()
|
|
|
|
|
-* APP支付接口2.0(APP支付):client.AliPayTradeAppPay()
|
|
|
|
|
-* 统一收单交易支付接口(商家扫用户付款码):client.AliPayTradePay()
|
|
|
|
|
-* 统一收单交易创建接口(小程序支付):client.AliPayTradeCreate()
|
|
|
|
|
-* 统一收单线下交易查询:client.AliPayTradeQuery()
|
|
|
|
|
-* 统一收单交易关闭接口:client.AliPayTradeClose()
|
|
|
|
|
-* 统一收单交易撤销接口:client.AliPayTradeCancel()
|
|
|
|
|
-* 统一收单交易退款接口:client.AliPayTradeRefund()
|
|
|
|
|
-* 统一收单退款页面接口:client.AliPayTradePageRefund()
|
|
|
|
|
-* 统一收单交易退款查询:client.AliPayTradeFastPayRefundQuery()
|
|
|
|
|
-* 统一收单交易结算接口:client.AliPayTradeOrderSettle()
|
|
|
|
|
-* 统一收单线下交易预创建(用户扫商品收款码):client.AliPayTradePrecreate()
|
|
|
|
|
-* 单笔转账到支付宝账户接口(商户给支付宝用户转账):client.AlipayFundTransToaccountTransfer()
|
|
|
|
|
-* 换取授权访问令牌(获取access_token,user_id等信息):client.AliPaySystemOauthToken()
|
|
|
|
|
-* 支付宝会员授权信息查询接口(App支付宝登录):client.AlipayUserInfoShare()
|
|
|
|
|
-* 换取应用授权令牌(获取app_auth_token,auth_app_id,user_id等信息):client.AliPayOpenAuthTokenApp()
|
|
|
|
|
|
|
+* 手机网站支付接口2.0(手机网站支付):client.TradeWapPay()
|
|
|
|
|
+* 统一收单下单并支付页面接口(电脑网站支付):client.TradePagePay()
|
|
|
|
|
+* APP支付接口2.0(APP支付):client.TradeAppPay()
|
|
|
|
|
+* 统一收单交易支付接口(商家扫用户付款码):client.TradePay()
|
|
|
|
|
+* 统一收单交易创建接口(小程序支付):client.TradeCreate()
|
|
|
|
|
+* 统一收单线下交易查询:client.TradeQuery()
|
|
|
|
|
+* 统一收单交易关闭接口:client.TradeClose()
|
|
|
|
|
+* 统一收单交易撤销接口:client.TradeCancel()
|
|
|
|
|
+* 统一收单交易退款接口:client.TradeRefund()
|
|
|
|
|
+* 统一收单退款页面接口:client.TradePageRefund()
|
|
|
|
|
+* 统一收单交易退款查询:client.TradeFastPayRefundQuery()
|
|
|
|
|
+* 统一收单交易结算接口:client.TradeOrderSettle()
|
|
|
|
|
+* 统一收单线下交易预创建(用户扫商品收款码):client.TradePrecreate()
|
|
|
|
|
+* 单笔转账到支付宝账户接口(商户给支付宝用户转账):client.FundTransToaccountTransfer()
|
|
|
|
|
+* 换取授权访问令牌(获取access_token,user_id等信息):client.SystemOauthToken()
|
|
|
|
|
+* 支付宝会员授权信息查询接口(App支付宝登录):client.UserInfoShare()
|
|
|
|
|
+* 换取应用授权令牌(获取app_auth_token,auth_app_id,user_id等信息):client.OpenAuthTokenApp()
|
|
|
* 获取芝麻信用分:client.ZhimaCreditScoreGet()
|
|
* 获取芝麻信用分:client.ZhimaCreditScoreGet()
|
|
|
-* 身份认证初始化服务:client.AliPayUserCertifyOpenInit()
|
|
|
|
|
-* 身份认证开始认证(获取认证链接):client.AliPayUserCertifyOpenCertify()
|
|
|
|
|
-* 身份认证记录查询:client.AliPayUserCertifyOpenQuery()
|
|
|
|
|
|
|
+* 身份认证初始化服务:client.UserCertifyOpenInit()
|
|
|
|
|
+* 身份认证开始认证(获取认证链接):client.UserCertifyOpenCertify()
|
|
|
|
|
+* 身份认证记录查询:client.UserCertifyOpenQuery()
|
|
|
|
|
|
|
|
### 支付宝公共API
|
|
### 支付宝公共API
|
|
|
|
|
|
|
|
-* gopay.GetCertSN() => 获取证书SN号(app_cert_sn、alipay_cert_sn、alipay_root_cert_sn>
|
|
|
|
|
-* gopay.AliPaySystemOauthToken() => 换取授权访问令牌(得到access_token,user_id等信息)
|
|
|
|
|
-* gopay.FormatPrivateKey() => 格式化应用私钥
|
|
|
|
|
-* gopay.FormatAliPayPublicKey() => 格式化支付宝公钥
|
|
|
|
|
-* gopay.ParseAliPayNotifyResult() => 解析支付宝支付异步通知的参数到Struct
|
|
|
|
|
-* gopay.ParseAliPayNotifyResultToBodyMap() => 解析支付宝支付异步通知的参数到BodyMap
|
|
|
|
|
-* gopay.VerifyAliPaySign() => 支付宝异步通知参数验签
|
|
|
|
|
-* gopay.VerifyAliPaySyncSign() => 支付宝同步返回参数验签
|
|
|
|
|
-* gopay.DecryptAliPayOpenDataToStruct() => 支付宝小程序敏感加密数据解析到结构体
|
|
|
|
|
|
|
+* alipay.GetCertSN() => 获取证书SN号(app_cert_sn、alipay_cert_sn、alipay_root_cert_sn>
|
|
|
|
|
+* alipay.SystemOauthToken() => 换取授权访问令牌(得到access_token,user_id等信息)
|
|
|
|
|
+* alipay.FormatPrivateKey() => 格式化应用私钥
|
|
|
|
|
+* alipay.FormatPublicKey() => 格式化支付宝公钥
|
|
|
|
|
+* alipay.ParseNotifyResult() => 解析支付宝支付异步通知的参数到Struct
|
|
|
|
|
+* alipay.ParseNotifyResultToBodyMap() => 解析支付宝支付异步通知的参数到BodyMap
|
|
|
|
|
+* alipay.VerifySign() => 支付宝异步通知参数验签
|
|
|
|
|
+* alipay.VerifySyncSign() => 支付宝同步返回参数验签
|
|
|
|
|
+* alipay.DecryptOpenDataToStruct() => 解密支付宝开放数据到 结构体
|
|
|
|
|
+* alipay.DecryptOpenDataToBodyMap() => 解密支付宝开放数据到 BodyMap
|
|
|
|
|
|
|
|
# 一、安装
|
|
# 一、安装
|
|
|
|
|
|
|
@@ -109,10 +125,9 @@ $ go get -u github.com/iGoogle-ink/gopay
|
|
|
* #### 查看 GoPay 版本
|
|
* #### 查看 GoPay 版本
|
|
|
* [版本更新记录](https://github.com/iGoogle-ink/gopay/blob/master/release_note.txt)
|
|
* [版本更新记录](https://github.com/iGoogle-ink/gopay/blob/master/release_note.txt)
|
|
|
```go
|
|
```go
|
|
|
-package main
|
|
|
|
|
-
|
|
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
+
|
|
|
"github.com/iGoogle-ink/gopay"
|
|
"github.com/iGoogle-ink/gopay"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -140,12 +155,16 @@ QQ群:
|
|
|
|
|
|
|
|
微信官方文档:[官方文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
|
|
微信官方文档:[官方文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/wechat"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
// 初始化微信客户端
|
|
// 初始化微信客户端
|
|
|
// appId:应用ID
|
|
// appId:应用ID
|
|
|
// mchId:商户ID
|
|
// mchId:商户ID
|
|
|
// apiKey:API秘钥值
|
|
// apiKey:API秘钥值
|
|
|
// isProd:是否是正式环境
|
|
// isProd:是否是正式环境
|
|
|
-client := gopay.NewWeChatClient("wxdaa2ab9ef87b5497", mchId, apiKey, false)
|
|
|
|
|
|
|
+client := wechat.NewClient("wxdaa2ab9ef87b5497", mchId, apiKey, false)
|
|
|
|
|
|
|
|
// 设置国家:不设置默认 中国国内
|
|
// 设置国家:不设置默认 中国国内
|
|
|
// gopay.China:中国国内
|
|
// gopay.China:中国国内
|
|
@@ -178,11 +197,15 @@ client.AddCertFilePath()
|
|
|
沙箱环境使用说明:[文档地址](https://docs.open.alipay.com/200/105311)
|
|
沙箱环境使用说明:[文档地址](https://docs.open.alipay.com/200/105311)
|
|
|
|
|
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/alipay"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//初始化支付宝客户端
|
|
//初始化支付宝客户端
|
|
|
// appId:应用ID
|
|
// appId:应用ID
|
|
|
// privateKey:应用秘钥
|
|
// privateKey:应用秘钥
|
|
|
// isProd:是否是正式环境
|
|
// isProd:是否是正式环境
|
|
|
-client := gopay.NewAliPayClient("2016091200494382", privateKey, false)
|
|
|
|
|
|
|
+client := alipay.NewClient("2016091200494382", privateKey, false)
|
|
|
|
|
|
|
|
//设置支付宝请求 公共参数
|
|
//设置支付宝请求 公共参数
|
|
|
// 注意:具体设置哪些参数,根据不同的方法而不同,此处列举出所以设置参数
|
|
// 注意:具体设置哪些参数,根据不同的方法而不同,此处列举出所以设置参数
|
|
@@ -206,6 +229,10 @@ client, err := client.SetAliPayRootCertSnByPath("alipayRootCert.crt")
|
|
|
|
|
|
|
|
具体参数请根据不同接口查看:[微信支付接口文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
|
|
具体参数请根据不同接口查看:[微信支付接口文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/wechat"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//初始化 BodyMap
|
|
//初始化 BodyMap
|
|
|
bm := make(gopay.BodyMap)
|
|
bm := make(gopay.BodyMap)
|
|
|
bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
@@ -232,8 +259,8 @@ bm.Set("scene_info", sceneInfo)
|
|
|
|
|
|
|
|
//参数 sign ,可单独生成赋值到BodyMap中;也可不传sign参数,client内部会自动获取
|
|
//参数 sign ,可单独生成赋值到BodyMap中;也可不传sign参数,client内部会自动获取
|
|
|
//如需单独赋值 sign 参数,需通过下面方法,最后获取sign值并在最后赋值此参数
|
|
//如需单独赋值 sign 参数,需通过下面方法,最后获取sign值并在最后赋值此参数
|
|
|
-sign := gopay.GetWeChatParamSign("wxdaa2ab9ef87b5497", mchId, apiKey, body)
|
|
|
|
|
-//sign, _ := gopay.GetWeChatSanBoxParamSign("wxdaa2ab9ef87b5497", mchId, apiKey, body)
|
|
|
|
|
|
|
+sign := wechat.GetParamSign("wxdaa2ab9ef87b5497", mchId, apiKey, body)
|
|
|
|
|
+//sign, _ := wechat.GetSanBoxParamSign("wxdaa2ab9ef87b5497", mchId, apiKey, body)
|
|
|
bm.Set("sign", sign)
|
|
bm.Set("sign", sign)
|
|
|
```
|
|
```
|
|
|
|
|
|
|
@@ -241,7 +268,6 @@ bm.Set("sign", sign)
|
|
|
|
|
|
|
|
具体参数请根据不同接口查看:[支付宝支付API接口文档](https://docs.open.alipay.com/api_1/alipay.trade.wap.pay)
|
|
具体参数请根据不同接口查看:[支付宝支付API接口文档](https://docs.open.alipay.com/api_1/alipay.trade.wap.pay)
|
|
|
```go
|
|
```go
|
|
|
-//此时李
|
|
|
|
|
//初始化 BodyMap
|
|
//初始化 BodyMap
|
|
|
bm := make(gopay.BodyMap)
|
|
bm := make(gopay.BodyMap)
|
|
|
bm.Set("subject", "手机网站测试支付")
|
|
bm.Set("subject", "手机网站测试支付")
|
|
@@ -271,37 +297,37 @@ wxRsp, err := client.Transfer(bm, "apiclient_cert.pem", "apiclient_key.pem", "ap
|
|
|
* #### 支付宝 client
|
|
* #### 支付宝 client
|
|
|
```go
|
|
```go
|
|
|
//手机网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面
|
|
//手机网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面
|
|
|
-payUrl, err := client.AliPayTradeWapPay(bm)
|
|
|
|
|
|
|
+payUrl, err := client.TradeWapPay(bm)
|
|
|
|
|
|
|
|
//电脑网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面
|
|
//电脑网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面
|
|
|
-payUrl, err := client.AliPayTradePagePay(bm)
|
|
|
|
|
|
|
+payUrl, err := client.TradePagePay(bm)
|
|
|
|
|
|
|
|
//APP支付是通过服务端获取支付参数后,然后通过Android/iOS客户端的SDK调用支付功能
|
|
//APP支付是通过服务端获取支付参数后,然后通过Android/iOS客户端的SDK调用支付功能
|
|
|
-payParam, err := client.AliPayTradeAppPay(bm)
|
|
|
|
|
|
|
+payParam, err := client.TradeAppPay(bm)
|
|
|
|
|
|
|
|
//商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款
|
|
//商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款
|
|
|
-aliRsp, err := client.AliPayTradePay(bm)
|
|
|
|
|
|
|
+aliRsp, err := client.TradePay(bm)
|
|
|
|
|
|
|
|
//支付宝小程序支付时 buyer_id 为必传参数,需要提前获取,获取方法如下两种
|
|
//支付宝小程序支付时 buyer_id 为必传参数,需要提前获取,获取方法如下两种
|
|
|
-// 1、gopay.AliPaySystemOauthToken() 返回取值:rsp.AliPaySystemOauthTokenResponse.UserId
|
|
|
|
|
-// 2、client.AliPaySystemOauthToken() 返回取值:aliRsp.AliPaySystemOauthTokenResponse.UserId
|
|
|
|
|
-aliRsp, err := client.AliPayTradeCreate(bm)
|
|
|
|
|
-
|
|
|
|
|
-aliRsp, err := client.AliPayTradeQuery(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradeClose(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradeCancel(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradeRefund(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradePageRefund(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradeFastPayRefundQuery(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradeOrderSettle(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayTradePrecreate(bm)
|
|
|
|
|
-aliRsp, err := client.AlipayFundTransToaccountTransfer(bm)
|
|
|
|
|
-aliRsp, err := client.AliPaySystemOauthToken(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayOpenAuthTokenApp(bm)
|
|
|
|
|
|
|
+// 1、gopay.SystemOauthToken() 返回取值:rsp.SystemOauthTokenResponse.UserId
|
|
|
|
|
+// 2、client.SystemOauthToken() 返回取值:aliRsp.SystemOauthTokenResponse.UserId
|
|
|
|
|
+aliRsp, err := client.TradeCreate(bm)
|
|
|
|
|
+
|
|
|
|
|
+aliRsp, err := client.TradeQuery(bm)
|
|
|
|
|
+aliRsp, err := client.TradeClose(bm)
|
|
|
|
|
+aliRsp, err := client.TradeCancel(bm)
|
|
|
|
|
+aliRsp, err := client.TradeRefund(bm)
|
|
|
|
|
+aliRsp, err := client.TradePageRefund(bm)
|
|
|
|
|
+aliRsp, err := client.TradeFastPayRefundQuery(bm)
|
|
|
|
|
+aliRsp, err := client.TradeOrderSettle(bm)
|
|
|
|
|
+aliRsp, err := client.TradePrecreate(bm)
|
|
|
|
|
+aliRsp, err := client.FundTransToaccountTransfer(bm)
|
|
|
|
|
+aliRsp, err := client.SystemOauthToken(bm)
|
|
|
|
|
+aliRsp, err := client.OpenAuthTokenApp(bm)
|
|
|
aliRsp, err := client.ZhimaCreditScoreGet(bm)
|
|
aliRsp, err := client.ZhimaCreditScoreGet(bm)
|
|
|
-aliRsp, err := client.AliPayUserCertifyOpenInit(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayUserCertifyOpenCertify(bm)
|
|
|
|
|
-aliRsp, err := client.AliPayUserCertifyOpenQuery(bm)
|
|
|
|
|
|
|
+aliRsp, err := client.UserCertifyOpenInit(bm)
|
|
|
|
|
+aliRsp, err := client.UserCertifyOpenCertify(bm)
|
|
|
|
|
+aliRsp, err := client.UserCertifyOpenQuery(bm)
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
## 4、微信统一下单后,获取微信小程序支付、APP支付、微信内H5支付所需要的 paySign
|
|
## 4、微信统一下单后,获取微信小程序支付、APP支付、微信内H5支付所需要的 paySign
|
|
@@ -313,42 +339,46 @@ APP支付官方文档:[APP端调起支付的参数列表文档](https://pay.we
|
|
|
|
|
|
|
|
微信内H5支付官方文档:[微信内H5支付文档](https://pay.weixin.qq.com/wiki/doc/api/external/jsapi.php?chapter=7_7&index=6)
|
|
微信内H5支付官方文档:[微信内H5支付文档](https://pay.weixin.qq.com/wiki/doc/api/external/jsapi.php?chapter=7_7&index=6)
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/wechat"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//====微信小程序 paySign====
|
|
//====微信小程序 paySign====
|
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
prepayId := "prepay_id=" + wxRsp.PrepayId //此处的 wxRsp.PrepayId ,统一下单成功后得到
|
|
prepayId := "prepay_id=" + wxRsp.PrepayId //此处的 wxRsp.PrepayId ,统一下单成功后得到
|
|
|
//获取微信小程序支付的 paySign
|
|
//获取微信小程序支付的 paySign
|
|
|
-// appId:APPID
|
|
|
|
|
|
|
+// appId:AppID
|
|
|
// nonceStr:随机字符串
|
|
// nonceStr:随机字符串
|
|
|
// prepayId:统一下单成功后得到的值
|
|
// prepayId:统一下单成功后得到的值
|
|
|
// signType:签名方式,务必与统一下单时用的签名方式一致
|
|
// signType:签名方式,务必与统一下单时用的签名方式一致
|
|
|
// timeStamp:时间
|
|
// timeStamp:时间
|
|
|
// apiKey:API秘钥值
|
|
// apiKey:API秘钥值
|
|
|
-paySign := gopay.GetMiniPaySign(AppID, wxRsp.NonceStr, prepayId, gopay.SignType_MD5, timeStamp, apiKey)
|
|
|
|
|
|
|
+paySign := wechat.GetMiniPaySign(AppID, wxRsp.NonceStr, prepayId, wechat.SignType_MD5, timeStamp, apiKey)
|
|
|
|
|
|
|
|
//====APP支付 paySign====
|
|
//====APP支付 paySign====
|
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
//获取APP支付的 paySign
|
|
//获取APP支付的 paySign
|
|
|
//注意:package 参数因为是固定值,无需开发者再传入
|
|
//注意:package 参数因为是固定值,无需开发者再传入
|
|
|
-// appId:APPID
|
|
|
|
|
|
|
+// appId:AppID
|
|
|
// partnerid:partnerid
|
|
// partnerid:partnerid
|
|
|
// nonceStr:随机字符串
|
|
// nonceStr:随机字符串
|
|
|
// prepayId:统一下单成功后得到的值
|
|
// prepayId:统一下单成功后得到的值
|
|
|
// signType:签名方式,务必与统一下单时用的签名方式一致
|
|
// signType:签名方式,务必与统一下单时用的签名方式一致
|
|
|
// timeStamp:时间
|
|
// timeStamp:时间
|
|
|
// apiKey:API秘钥值
|
|
// apiKey:API秘钥值
|
|
|
-paySign := gopay.GetAppPaySign(appid, partnerid, wxRsp.NonceStr, wxRsp.PrepayId, gopay.SignType_MD5, timeStamp, apiKey)
|
|
|
|
|
|
|
+paySign := wechat.GetAppPaySign(appid, partnerid, wxRsp.NonceStr, wxRsp.PrepayId, wechat.SignType_MD5, timeStamp, apiKey)
|
|
|
|
|
|
|
|
//====微信内H5支付 paySign====
|
|
//====微信内H5支付 paySign====
|
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
packages := "prepay_id=" + wxRsp.PrepayId //此处的 wxRsp.PrepayId ,统一下单成功后得到
|
|
packages := "prepay_id=" + wxRsp.PrepayId //此处的 wxRsp.PrepayId ,统一下单成功后得到
|
|
|
//获取微信内H5支付 paySign
|
|
//获取微信内H5支付 paySign
|
|
|
-// appId:APPID
|
|
|
|
|
|
|
+// appId:AppID
|
|
|
// nonceStr:随机字符串
|
|
// nonceStr:随机字符串
|
|
|
// packages:统一下单成功后拼接得到的值
|
|
// packages:统一下单成功后拼接得到的值
|
|
|
// signType:签名方式,务必与统一下单时用的签名方式一致
|
|
// signType:签名方式,务必与统一下单时用的签名方式一致
|
|
|
// timeStamp:时间
|
|
// timeStamp:时间
|
|
|
// apiKey:API秘钥值
|
|
// apiKey:API秘钥值
|
|
|
-paySign := gopay.GetMiniPaySign(AppID, wxRsp.NonceStr, packages, gopay.SignType_MD5, timeStamp, apiKey)
|
|
|
|
|
|
|
+paySign := wechat.GetH5PaySign(AppID, wxRsp.NonceStr, packages, wechat.SignType_MD5, timeStamp, apiKey)
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
## 5、同步返回参数验签Sign、异步通知参数解析和验签Sign、异步通知返回
|
|
## 5、同步返回参数验签Sign、异步通知参数解析和验签Sign、异步通知返回
|
|
@@ -361,6 +391,11 @@ paySign := gopay.GetMiniPaySign(AppID, wxRsp.NonceStr, packages, gopay.SignType_
|
|
|
|
|
|
|
|
* #### 微信
|
|
* #### 微信
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay"
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/wechat"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//====同步返回参数验签Sign====
|
|
//====同步返回参数验签Sign====
|
|
|
wxRsp, err := client.UnifiedOrder(bm)
|
|
wxRsp, err := client.UnifiedOrder(bm)
|
|
|
// 微信同步返回参数验签或异步通知参数验签
|
|
// 微信同步返回参数验签或异步通知参数验签
|
|
@@ -369,16 +404,16 @@ wxRsp, err := client.UnifiedOrder(bm)
|
|
|
// bean:微信同步返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
|
|
// bean:微信同步返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
|
|
|
// 返回参数 ok:是否验签通过
|
|
// 返回参数 ok:是否验签通过
|
|
|
// 返回参数 err:错误信息
|
|
// 返回参数 err:错误信息
|
|
|
-ok, err := gopay.VerifyWeChatSign(apiKey, gopay.SignType_MD5, wxRsp)
|
|
|
|
|
|
|
+ok, err := wechat.VerifySign(apiKey, wechat.SignType_MD5, wxRsp)
|
|
|
|
|
|
|
|
//====支付异步通知参数解析和验签Sign====
|
|
//====支付异步通知参数解析和验签Sign====
|
|
|
// 解析支付异步通知的参数
|
|
// 解析支付异步通知的参数
|
|
|
// req:*http.Request
|
|
// req:*http.Request
|
|
|
// 返回参数 notifyReq:通知的参数
|
|
// 返回参数 notifyReq:通知的参数
|
|
|
// 返回参数 err:错误信息
|
|
// 返回参数 err:错误信息
|
|
|
-notifyReq, err := gopay.ParseWeChatNotifyResult(c.Request()) //c.Request()是 echo 框架的获取 *http.Request 的写法
|
|
|
|
|
|
|
+notifyReq, err := wechat.ParseNotifyResult(c.Request()) //c.Request()是 echo 框架的获取 *http.Request 的写法
|
|
|
//验签操作
|
|
//验签操作
|
|
|
-ok, err := gopay.VerifyWeChatSign(apiKey, gopay.SignType_MD5, notifyReq)
|
|
|
|
|
|
|
+ok, err := wechat.VerifySign(apiKey, wechat.SignType_MD5, notifyReq)
|
|
|
|
|
|
|
|
//====退款异步通知参数解析,退款通知无sign,不用验签====
|
|
//====退款异步通知参数解析,退款通知无sign,不用验签====
|
|
|
//
|
|
//
|
|
@@ -386,13 +421,13 @@ ok, err := gopay.VerifyWeChatSign(apiKey, gopay.SignType_MD5, notifyReq)
|
|
|
// req:*http.Request
|
|
// req:*http.Request
|
|
|
// 返回参数 notifyReq:通知的参数
|
|
// 返回参数 notifyReq:通知的参数
|
|
|
// 返回参数 err:错误信息
|
|
// 返回参数 err:错误信息
|
|
|
-notifyReq, err := gopay.ParseWeChatRefundNotifyResult(c.Request())
|
|
|
|
|
|
|
+notifyReq, err := wechat.ParseRefundNotifyResult(c.Request())
|
|
|
|
|
|
|
|
//==解密退款异步通知的加密参数 req_info ==
|
|
//==解密退款异步通知的加密参数 req_info ==
|
|
|
-refundNotify, err := gopay.DecryptRefundNotifyReqInfo(notifyReq.ReqInfo, apiKey)
|
|
|
|
|
|
|
+refundNotify, err := wechat.DecryptRefundNotifyReqInfo(notifyReq.ReqInfo, apiKey)
|
|
|
|
|
|
|
|
//==异步通知,返回给微信平台的信息==
|
|
//==异步通知,返回给微信平台的信息==
|
|
|
-rsp := new(gopay.WeChatNotifyResponse) //回复微信的数据
|
|
|
|
|
|
|
+rsp := new(wechat.NotifyResponse) //回复微信的数据
|
|
|
rsp.ReturnCode = gopay.SUCCESS
|
|
rsp.ReturnCode = gopay.SUCCESS
|
|
|
rsp.ReturnMsg = gopay.OK
|
|
rsp.ReturnMsg = gopay.OK
|
|
|
return c.String(http.StatusOK, rsp.ToXmlString()) //此写法是 echo 框架返回客户端数据的写法
|
|
return c.String(http.StatusOK, rsp.ToXmlString()) //此写法是 echo 框架返回客户端数据的写法
|
|
@@ -404,8 +439,12 @@ return c.String(http.StatusOK, rsp.ToXmlString()) //此写法是 echo 框架
|
|
|
|
|
|
|
|
支付宝支付后的同步/异步通知验签文档:[支付结果通知](https://docs.open.alipay.com/200/106120)
|
|
支付宝支付后的同步/异步通知验签文档:[支付结果通知](https://docs.open.alipay.com/200/106120)
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/alipay"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//====同步返回参数验签Sign====
|
|
//====同步返回参数验签Sign====
|
|
|
-aliRsp, err := client.AliPayTradePay(bm)
|
|
|
|
|
|
|
+aliRsp, err := client.TradePay(bm)
|
|
|
//支付宝同步返回验签
|
|
//支付宝同步返回验签
|
|
|
// 注意:APP支付,手机网站支付,电脑网站支付 暂不支持同步返回验签
|
|
// 注意:APP支付,手机网站支付,电脑网站支付 暂不支持同步返回验签
|
|
|
// aliPayPublicKey:支付宝公钥
|
|
// aliPayPublicKey:支付宝公钥
|
|
@@ -413,16 +452,16 @@ aliRsp, err := client.AliPayTradePay(bm)
|
|
|
// sign:待验签sign,aliRsp.Sign
|
|
// sign:待验签sign,aliRsp.Sign
|
|
|
// 返回参数ok:是否验签通过
|
|
// 返回参数ok:是否验签通过
|
|
|
// 返回参数err:错误信息
|
|
// 返回参数err:错误信息
|
|
|
-ok, err := gopay.VerifyAliPaySyncSign(aliPayPublicKey, aliRsp.SignData, aliRsp.Sign)
|
|
|
|
|
|
|
+ok, err := alipay.VerifySyncSign(aliPayPublicKey, aliRsp.SignData, aliRsp.Sign)
|
|
|
|
|
|
|
|
//====异步通知参数解析和验签Sign====
|
|
//====异步通知参数解析和验签Sign====
|
|
|
//解析异步通知的参数
|
|
//解析异步通知的参数
|
|
|
// req:*http.Request
|
|
// req:*http.Request
|
|
|
// 返回参数 notifyReq:通知的参数
|
|
// 返回参数 notifyReq:通知的参数
|
|
|
// 返回参数 err:错误信息
|
|
// 返回参数 err:错误信息
|
|
|
-notifyReq, err = gopay.ParseAliPayNotifyResult(c.Request()) //c.Request()是 echo 框架的获取
|
|
|
|
|
|
|
+notifyReq, err = alipay.ParseNotifyResult(c.Request()) //c.Request()是 echo 框架的获取
|
|
|
//验签操作
|
|
//验签操作
|
|
|
-ok, err = gopay.VerifyAliPaySign(aliPayPublicKey, notifyReq)
|
|
|
|
|
|
|
+ok, err = alipay.VerifySign(aliPayPublicKey, notifyReq)
|
|
|
|
|
|
|
|
//==异步通知,返回支付宝平台的信息==
|
|
//==异步通知,返回支付宝平台的信息==
|
|
|
// 文档:https://docs.open.alipay.com/203/105286
|
|
// 文档:https://docs.open.alipay.com/203/105286
|
|
@@ -440,11 +479,15 @@ button按钮获取手机号码:[button组件文档](https://developers.weixin.
|
|
|
|
|
|
|
|
微信解密算法文档:[解密算法文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html)
|
|
微信解密算法文档:[解密算法文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html)
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/wechat"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//获取微信小程序用户的OpenId、SessionKey、UnionId
|
|
//获取微信小程序用户的OpenId、SessionKey、UnionId
|
|
|
// appId:微信小程序的APPID
|
|
// appId:微信小程序的APPID
|
|
|
// appSecret:微信小程序的AppSecret
|
|
// appSecret:微信小程序的AppSecret
|
|
|
// wxCode:小程序调用wx.login 获取的code
|
|
// wxCode:小程序调用wx.login 获取的code
|
|
|
-sessionRsp, err := gopay.Code2Session(appId, appSecret, wxCode)
|
|
|
|
|
|
|
+sessionRsp, err := wechat.Code2Session(appId, appSecret, wxCode)
|
|
|
|
|
|
|
|
//====解密微信加密数据到指定结构体====
|
|
//====解密微信加密数据到指定结构体====
|
|
|
|
|
|
|
@@ -452,13 +495,13 @@ sessionRsp, err := gopay.Code2Session(appId, appSecret, wxCode)
|
|
|
data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
|
|
data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
|
|
|
iv := "Cds8j3VYoGvnTp1BrjXdJg=="
|
|
iv := "Cds8j3VYoGvnTp1BrjXdJg=="
|
|
|
session := "lyY4HPQbaOYzZdG+JcYK9w=="
|
|
session := "lyY4HPQbaOYzZdG+JcYK9w=="
|
|
|
-phone := new(gopay.WeChatUserPhone)
|
|
|
|
|
|
|
+phone := new(wechat.UserPhone)
|
|
|
//解密开放数据
|
|
//解密开放数据
|
|
|
// encryptedData:包括敏感数据在内的完整用户信息的加密数据,小程序获取到
|
|
// encryptedData:包括敏感数据在内的完整用户信息的加密数据,小程序获取到
|
|
|
// iv:加密算法的初始向量,小程序获取到
|
|
// iv:加密算法的初始向量,小程序获取到
|
|
|
// sessionKey:会话密钥,通过 gopay.Code2Session() 方法获取到
|
|
// sessionKey:会话密钥,通过 gopay.Code2Session() 方法获取到
|
|
|
// beanPtr:需要解析到的结构体指针,操作完后,声明的结构体会被赋值
|
|
// beanPtr:需要解析到的结构体指针,操作完后,声明的结构体会被赋值
|
|
|
-err := gopay.DecryptWeChatOpenDataToStruct(data, iv, session, phone)
|
|
|
|
|
|
|
+err := wechat.DecryptOpenDataToStruct(data, iv, session, phone)
|
|
|
fmt.Println(*phone)
|
|
fmt.Println(*phone)
|
|
|
//获取微信小程序用户信息
|
|
//获取微信小程序用户信息
|
|
|
sessionKey := "tiihtNczf5v6AKRyjwEUhQ=="
|
|
sessionKey := "tiihtNczf5v6AKRyjwEUhQ=="
|
|
@@ -466,8 +509,8 @@ encryptedData := "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTya
|
|
|
iv2 := "r7BXXKkLb8qrSNn05n0qiA=="
|
|
iv2 := "r7BXXKkLb8qrSNn05n0qiA=="
|
|
|
|
|
|
|
|
//微信小程序 用户信息
|
|
//微信小程序 用户信息
|
|
|
-userInfo := new(gopay.WeChatAppletUserInfo)
|
|
|
|
|
-err = gopay.DecryptWeChatOpenDataToStruct(encryptedData, iv2, sessionKey, userInfo)
|
|
|
|
|
|
|
+userInfo := new(wechat.AppletUserInfo)
|
|
|
|
|
+err = wechat.DecryptOpenDataToStruct(encryptedData, iv2, sessionKey, userInfo)
|
|
|
fmt.Println(*userInfo)
|
|
fmt.Println(*userInfo)
|
|
|
|
|
|
|
|
data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
|
|
data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
|
|
@@ -478,7 +521,7 @@ session := "lyY4HPQbaOYzZdG+JcYK9w=="
|
|
|
// encryptedData:包括敏感数据在内的完整用户信息的加密数据
|
|
// encryptedData:包括敏感数据在内的完整用户信息的加密数据
|
|
|
// iv:加密算法的初始向量
|
|
// iv:加密算法的初始向量
|
|
|
// sessionKey:会话密钥
|
|
// sessionKey:会话密钥
|
|
|
-bm, err := gopay.DecryptWeChatOpenDataToBodyMap(data, iv, session)
|
|
|
|
|
|
|
+bm, err := wechat.DecryptOpenDataToBodyMap(data, iv, session)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
|
return
|
|
return
|
|
@@ -494,21 +537,25 @@ fmt.Println("WeChatUserPhone:", bm)
|
|
|
|
|
|
|
|
支付宝加解密文档:[AES配置文档](https://docs.alipay.com/mini/introduce/aes),[AES加解密文档](https://docs.open.alipay.com/common/104567)
|
|
支付宝加解密文档:[AES配置文档](https://docs.alipay.com/mini/introduce/aes),[AES加解密文档](https://docs.open.alipay.com/common/104567)
|
|
|
```go
|
|
```go
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/iGoogle-ink/gopay/alipay"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
//换取授权访问令牌(默认使用utf-8,RSA2)
|
|
//换取授权访问令牌(默认使用utf-8,RSA2)
|
|
|
// appId:应用ID
|
|
// appId:应用ID
|
|
|
// privateKey:应用私钥
|
|
// privateKey:应用私钥
|
|
|
// grantType:值为 authorization_code 时,代表用code换取;值为 refresh_token 时,代表用refresh_token换取,传空默认code换取
|
|
// grantType:值为 authorization_code 时,代表用code换取;值为 refresh_token 时,代表用refresh_token换取,传空默认code换取
|
|
|
// codeOrToken:支付宝授权码或refresh_token
|
|
// codeOrToken:支付宝授权码或refresh_token
|
|
|
-rsp, err := gopay.AlipaySystemOauthToken(appId, privateKey, grantType, codeOrToken)
|
|
|
|
|
|
|
+rsp, err := alipay.SystemOauthToken(appId, privateKey, grantType, codeOrToken)
|
|
|
|
|
|
|
|
//解密支付宝开放数据带到指定结构体
|
|
//解密支付宝开放数据带到指定结构体
|
|
|
// 以小程序获取手机号为例
|
|
// 以小程序获取手机号为例
|
|
|
-phone := new(gopay.AliPayUserPhone)
|
|
|
|
|
|
|
+phone := new(alipay.UserPhone)
|
|
|
//解密支付宝开放数据
|
|
//解密支付宝开放数据
|
|
|
// encryptedData:包括敏感数据在内的完整用户信息的加密数据
|
|
// encryptedData:包括敏感数据在内的完整用户信息的加密数据
|
|
|
// secretKey:AES密钥,支付宝管理平台配置
|
|
// secretKey:AES密钥,支付宝管理平台配置
|
|
|
// beanPtr:需要解析到的结构体指针
|
|
// beanPtr:需要解析到的结构体指针
|
|
|
-err := gopay.DecryptAliPayOpenDataToStruct(encryptedData, secretKey, phone)
|
|
|
|
|
|
|
+err := alipay.DecryptOpenDataToStruct(encryptedData, secretKey, phone)
|
|
|
fmt.Println(*phone)
|
|
fmt.Println(*phone)
|
|
|
```
|
|
```
|
|
|
|
|
|