Jerry 6 years ago
parent
commit
0abec7a725
1 changed files with 73 additions and 19 deletions
  1. 73 19
      README.md

+ 73 - 19
README.md

@@ -45,8 +45,8 @@
 * gopay.GetAppPaySign() => 获取APP支付所需要的paySign
 * gopay.ParseWeChatNotifyResultToBodyMap() => 解析微信支付异步通知的参数到BodyMap
 * gopay.ParseWeChatNotifyResult() => 解析微信支付异步通知的参数
+* gopay.VerifyWeChatSign() => 微信同步返回参数验签或异步通知参数验签
 * (**Deprecated**)gopay.VerifyWeChatResultSign()
-* gopay.VerifyWeChatSign() => 验证微信API返回结果或异步通知结果的Sign值
 * gopay.Code2Session() => 登录凭证校验:获取微信用户OpenId、UnionId、SessionKey
 * gopay.GetAccessToken() => 获取小程序全局唯一后台接口调用凭据
 * gopay.GetPaidUnionId() => 微信小程序用户支付完成后,获取该用户的 UnionId,无需用户授权
@@ -94,7 +94,8 @@
 * gopay.FormatPrivateKey() => 格式化应用私钥
 * gopay.FormatAliPayPublicKey() => 格式化支付宝公钥
 * gopay.ParseAliPayNotifyResult() => 解析并返回支付宝支付异步通知的参数
-* gopay.VerifyAliPayResultSign() => 支付宝支付异步通知的签名验证
+* gopay.VerifyAliPaySign() => 支付宝同步返回参数验签或异步通知参数验签
+* (**Deprecated**)gopay.VerifyAliPayResultSign()
 * gopay.DecryptAliPayOpenDataToStruct() => 支付宝小程序敏感加密数据解析到结构体
 
 # 安装
@@ -212,29 +213,31 @@ paySign := gopay.GetAppPaySign(appid, partnerid, wxRsp.NonceStr, prepayid, gopay
 fmt.Println("paySign:", paySign)
 ```
 
-### 1、解析并返回微信支付异步通知的参数,2、验证Sign值
+### 1、解析并返回微信支付异步通知的参数,2、同步返回/异步通知 参数验签
 
 > 微信支付后的异步通知文档:[支付结果通知](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8)
 
+* 异步验签操作
+
 ```go
 //解析微信支付异步通知的参数
 //    req:*http.Request
 //    返回参数notifyRsp:Notify请求的参数
 //    返回参数err:错误信息
-notifyRsp, err := gopay.ParseWeChatNotifyResult(c.Request())
+notifyReq, err := gopay.ParseWeChatNotifyResult(c.Request())
 if err != nil {
     fmt.Println("err:", err)
     return
 }
 fmt.Println("notifyRsp:", notifyRsp)
 
-//验证微信API返回结果或异步通知结果的Sign值
+//同步返回/异步通知 参数验签
 //    apiKey:API秘钥值
 //    signType:签名类型(调用API方法时填写的类型)
-//    bean:微信API返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
+//    bean:微信同步返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
 //    返回参数ok:是否验签通过
 //    返回参数err:错误信息
-ok, err := gopay.VerifyWeChatSign("192006250b4c09247ec02edce69f6a2d", "MD5", notifyRsp)
+ok, err := gopay.VerifyWeChatSign("192006250b4c09247ec02edce69f6a2d", "MD5", notifyReq)
 if err != nil {
     fmt.Println("err:", err)
 }
@@ -242,7 +245,7 @@ fmt.Println("ok:", ok)
 ```
 或者
 ```go
-//解析微信支付异步通知的结果到BodyMap
+//同步返回/异步通知 参数验签
 //    req:*http.Request
 //    返回参数bm:Notify请求的参数
 //    返回参数err:错误信息
@@ -252,10 +255,10 @@ if err != nil {
     return
 }
 
-//验证微信API返回结果或异步通知结果的Sign值
+//同步返回/异步通知 参数验签
 //    apiKey:API秘钥值
 //    signType:签名类型(调用API方法时填写的类型)
-//    bean:微信API返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
+//    bean:微信同步返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
 //    返回参数ok:是否验签通过
 //    返回参数err:错误信息
 ok, err := gopay.VerifyWeChatSign("192006250b4c09247ec02edce69f6a2d", gopay.SignType_MD5, bm)
@@ -265,6 +268,30 @@ if err != nil {
 fmt.Println("ok:", ok)
 ```
 
+* 同步验签操作
+
+```go
+//请求支付,成功后得到结果
+wxRsp, err := client.Micropay(body)
+if err != nil {
+    fmt.Println("Error:", err)
+    return
+}
+fmt.Println("Response:", *wxRsp)
+
+//同步返回/异步通知 参数验签
+//    apiKey:API秘钥值
+//    signType:签名类型(调用API方法时填写的类型)
+//    bean:微信同步返回的结构体 wxRsp 或 异步通知解析的结构体 notifyReq
+//    返回参数ok:是否验签通过
+//    返回参数err:错误信息
+ok, err := gopay.VerifyWeChatSign("GFDS8j98rewnmgl45wHTt980jg543abc", gopay.SignType_MD5, wxRsp)
+if err != nil {
+    fmt.Println("err:", err)
+}
+fmt.Println("同步验签结果:", ok)
+```
+
 ### 加密数据,解密到指定结构体
 
 > 拿小程序获取手机号为例
@@ -519,9 +546,36 @@ fmt.Println("rsp.SubMsg:", rsp.SubMsg)
 fmt.Println("rsp.Mobile:", rsp.Mobile)
 ```
 
-### 1、支付结果异步通知参数解析;2、验签操作
+### 1、支付结果异步通知参数解析;2、同步返回/异步通知 参数验签
+
+> 支付宝支付后的同步/异步通知验签文档:[支付结果通知](https://docs.open.alipay.com/200/106120)
 
-> 支付宝支付后的异步通知验签文档:[支付结果通知](https://docs.open.alipay.com/200/106120)
+* 同步返回参数验签(请注意看参数注释)
+
+```go
+//请求条码支付
+aliRsp, err := client.AliPayTradePay(body)
+if err != nil {
+    fmt.Println("err:", err)
+    return
+}
+fmt.Println("aliRsp:", *aliRsp)
+
+aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB"
+//支付宝同步返回验签或异步通知验签
+//    aliPayPublicKey:支付宝公钥
+//    bean: 同步返回验签时,此参数为 aliRsp.SignData ;异步通知验签时,此参数为异步通知解析的结构体 notifyReq
+//    syncSign:同步返回验签时,此参数必传,即:aliRsp.Sign ;异步通知验签时,不传此参数,否则会出错。
+//    返回参数ok:是否验签通过
+//    返回参数err:错误信息
+ok, err := gopay.VerifyAliPaySign(alipayPublicKey, aliRsp.SignData, aliRsp.Sign)
+if err != nil {
+    fmt.Println("gopay.VerifyAliPayResultSign:", err)
+}
+fmt.Println("同步返回验签:", ok)
+```
+
+* 异步返回参数验签(请注意看参数注释)
 
 ```go
 //解析支付完成后的异步通知参数信息
@@ -534,17 +588,17 @@ if err != nil {
 fmt.Println("notifyRsp:", notifyRsp)
 
 aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB"
-//验签操作
+//支付宝同步返回验签或异步通知验签
 //    aliPayPublicKey:支付宝公钥
-//    notifyRsp:利用 gopay.ParseAliPayNotifyResult() 得到的结构体
-//    返回参数ok:是否验证通过
+//    bean: 同步返回验签时,此参数为 aliRsp.SignData ;异步通知验签时,此参数为异步通知解析的结构体 notifyReq
+//    syncSign:同步返回验签时,此参数必传,即:aliRsp.Sign ;异步通知验签时,不传此参数,否则会出错。
+//    返回参数ok:是否验签通过
 //    返回参数err:错误信息
-ok, err := gopay.VerifyAliPayResultSign(aliPayPublicKey, notifyRsp)
+ok, err := gopay.VerifyAliPaySign(aliPayPublicKey, notifyRsp)
 if err != nil {
-	log.Println("gopay.VerifyAliPayResultSign:", err)
-	return
+	fmt.Println("gopay.VerifyAliPayResultSign:", err)
 }
-fmt.Println("ok:", ok)
+fmt.Println("异步返回验签:", ok)
 ```
 
 ### 支付宝付款结果异步通知,需回复支付宝平台是否成功