Jerry 7 anni fa
parent
commit
5d886ea066
3 ha cambiato i file con 48 aggiunte e 20 eliminazioni
  1. 30 3
      README.md
  2. 1 1
      alipay_client_test.go
  3. 17 16
      alipay_server_api.go

+ 30 - 3
README.md

@@ -145,9 +145,9 @@ sign := gopay.GetH5PaySign(appid, partnerid, wxRsp.NonceStr, prepayid, gopay.Sig
 fmt.Println("sign:", sign)
 ```
 
-### 支付结果通知回调:参数解析和Sign值的验证
+### 支付结果异步通知:参数解析和Sign值的验证
 
-> 微信支付后的回调通知文档[支付结果通知](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8)
+> 微信支付后的异步通知文档[支付结果通知](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8)
 
 ```go
 //解析支付完成后的回调信息
@@ -168,7 +168,6 @@ log.Println("ok:", ok)
 log.Println("sign:", sign)
 ```
 
-
 ### 加密数据,解密到指定结构体
 
 > 拿小程序获取手机号为例
@@ -369,6 +368,34 @@ fmt.Println("Response:", wxRsp)
 
 沙箱环境使用说明:[文档地址](https://docs.open.alipay.com/200/105311)
 
+### 支付结果异步通知:验签操作
+
+> 支付宝支付后的异步通知验签文档[支付结果通知](https://docs.open.alipay.com/200/106120)
+
+```go
+//解析支付完成后的回调信息
+notifyRsp, err := gopay.ParseAliPayNotifyResult(c.Request())
+if err != nil {
+    fmt.Println("err:", err)
+}
+fmt.Println("notifyRsp:", notifyRsp)
+
+//支付通知的签名验证和参数签名后的Sign
+//    aliPayPublicKey:支付宝公钥
+//    notifyRsp:利用 gopay.ParseAliPayNotifyResult() 得到的结构体
+//    返回参数ok:是否验证通过
+//    返回参数err:错误信息
+ok, err := gopay.VerifyAliPayResultSign(aliPayPublicKey, notifyRsp)
+if err != nil {
+	log.Println("signErr:", err)
+	return
+}
+log.Println("ok:", ok)
+```
+
+
+
+
 ### 手机网站支付
 
 * 手机网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面

+ 1 - 1
alipay_client_test.go

@@ -23,7 +23,7 @@ func TestAliPayClient_AliPayTradeWapPay(t *testing.T) {
 	//请求参数
 	body := make(BodyMap)
 	body.Set("subject", "手机网站测试支付")
-	body.Set("out_trade_no", "GYWX201901301040355706100439")
+	body.Set("out_trade_no", "GYWX201901301040355706100440")
 	body.Set("quit_url", "https://www.igoogle.ink")
 	body.Set("total_amount", "100.00")
 	body.Set("product_code", "QUICK_WAP_WAY")

+ 17 - 16
alipay_server_api.go

@@ -18,8 +18,6 @@ import (
 	"hash"
 	"log"
 	"net/http"
-	"net/url"
-	"sort"
 )
 
 //解析支付宝支付完成后的Notify信息
@@ -129,8 +127,11 @@ func VerifyAliPayResultSign(aliPayPublicKey string, notifyRsp *AliPayNotifyReque
 		}
 	}
 
+	sss := sortAliPaySignParams(body)
+	log.Println("sss:", sss)
 	pKey := FormatAliPayPublicKey(aliPayPublicKey)
-	signData := encodeBody(newBody)
+	signData := sortAliPaySignParams(newBody)
+	//signData := encodeBody(newBody)
 
 	log.Println("签名字符串:", signData)
 	err = verifyAliPaySign(signData, notifyRsp.Sign, notifyRsp.SignType, pKey)
@@ -140,19 +141,19 @@ func VerifyAliPayResultSign(aliPayPublicKey string, notifyRsp *AliPayNotifyReque
 	return true, nil
 }
 
-func encodeBody(body BodyMap) (signData string) {
-	keyList := make([]string, 0)
-	for k := range body {
-		keyList = append(keyList, k)
-	}
-	sort.Strings(keyList)
-
-	urlV := url.Values{}
-	for _, k := range keyList {
-		urlV.Add(k, body.Get(k))
-	}
-	return urlV.Encode()
-}
+//func encodeBody(body BodyMap) (signData string) {
+//	keyList := make([]string, 0)
+//	for k := range body {
+//		keyList = append(keyList, k)
+//	}
+//	sort.Strings(keyList)
+//
+//	urlV := url.Values{}
+//	for _, k := range keyList {
+//		urlV.Add(k, body.Get(k))
+//	}
+//	return urlV.Encode()
+//}
 
 func jsonToString(v interface{}) (str string) {
 	if v == nil {