微信小程序开发实战11_4 微信支付退款流程
13.1退款申请
接下来分别给出直连商户与服务商两种模式下的支付退款申请接口的相关数据结构以及函数。
13.2处理退款通知
退款结果对重要的数据进行了加密,商户需要用商户密钥进行解密后才能获得结果通知的内容。商户对resource对象进行解密后,得到的通知参数,具体字段含义如下:
退款通知相关的数据结构定义如下:
接下来看看一个退款通知处理的示例代码:
func HandlerRefundCB(w http.ResponseWriter, r *http.Request) { var ret_info RefundOrderInfoCB body, err := ioutil.ReadAll(r.Body) if err != nil { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } if len(body) < 1 { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } //读取签名验证所需的参数 var sing_param WxSignParam err = sing_param.InitFromRequest(r, string(body)) if err != nil { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } //获取平台证书,并进行签名验证 plat_certificate := GetPlatCertificate(ent, sing_param.CertSerial) err = ResponseValidate(&sing_param, plat_certificate); if err != nil { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } //body数据解析 var ent_cb WeixinPayNotice if err = json.Unmarshal(body, &ent_cb); err != nil { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } //数据解密 decryptBytes, err := DecryptAES256GCM( ent.MchAPIKey, ent_cb.Resource.AssociatedData, ent_cb.Resource.Nonce, ent_cb.Resource.Ciphertext) if err != nil { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } //订单数据解析 err = json.Unmarshal([]byte(decryptBytes), &ret_info) if err != nil { wxpay4go.HttpCallBackReturn(w, 500,"FAIL", "FAIL") return } //其他业务逻辑开始 //.......................... //其他业务逻辑结束 wxpay4go.HttpCallBackReturn(w, 200, "SUCCESS", "SUCCESS") }
13.3退款查询
两种查询方式返回结果相同,返回结果的数据结构如下所示:
以下是退款查询的服务商模式的代码以及直连商户模式的代码:
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
Unity转微信小游戏与JS交互