在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、 选择场景,查看开发文档.
这里我选择的是Native支付、API文档是V2.(文档V3与V2区别)
模式一:开发前,商户必须在公众平台后台设置支付回调URL。URL实现的功能:接收用户扫码后微信支付系统回调的productid和openid;
模式二:商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。
注意:code_url有效期为2小时,过期后扫码不能再发起支付。
模式一是先根据微信支付规定格式生成二维码,当客户扫描之后通知微信支付系统,微信系统再和商户后台系统进行一系列的操作最终发起用户端支付流程(需设置支付回调url),而
模式二则更加简单,是先在商户后台系统生成订单信息,然后就调用微信系统的统一下单api,商户系统将返回的结果生成二维码供用户扫描即可.
三、下载Demo
四、设置必填参数
我这里选择的是c#,运行需要设置三个参数,又因为选择模式二,还需要设置NotifyUrl
APPID:绑定支付的APPID
MCHID:商户号(必须配置)
KEY:商户支付密钥,参考开户邮件设置(必须配置),请妥善保管,避免密钥泄露
NotifyUrl:支付结果通知回调url,用于商户接收支付结果
五、开发中遇到的坑 1.total_fee(总金额)单位为/分,与支付宝默认金额/元不一致. 2.传递的参数中不能包含中文字符.由于demo中默认的签名算法是 HMAC-SHA256,而CalcHMACSHA256Hash()中使用的Encoding.Default(Windwos默认是gbk). 所以只需将 WxPayData.CalcHMACSHA256Hash() 方法中的 Encoding.Default 改为Encoding.UTF8 即可. 3.通知回调函数中校验签名时出错,将接受到的xml转化为WxPayData,然后调用CheckSign(WxPayData.SIGN_TYPE_HMAC_SHA256)出错的原因是因为MakeSign 方法中如果选择的是WxPayData.SIGN_TYPE_HMAC_SHA256他默认加密后得值为小写,而回调函数中的sign为大写.所以只需将 WxPayData.MakeSign() 中的 CalcHMACSHA256Hash() 方法的值ToUpper()之后再返回就OK了.(我的Notify方法) [HttpPost] [AllowAnonymous] public string Notify() { Stream inputstream = Request.InputStream; byte[] b = new byte[inputstream.Length]; inputstream.Read(b, 0, (int)inputstream.Length); string inputstr = Encoding.UTF8.GetString(b); SiteHelper.LogPayInfo($"WxPayApi PayResult :{inputstr.ToJson()}"); WxPayData _reciveResult = new WxPayData(); _reciveResult.FromXml(inputstr); //校验签名以及查询结果 if (!_reciveResult.CheckSign(WxPayData.SIGN_TYPE_HMAC_SHA256) || _reciveResult.GetValue("result_code").ToString() !="SUCCESS" || _reciveResult.GetValue("return_code").ToString() != "SUCCESS") { WxPayData _returnErrResult = new WxPayData(); _returnErrResult.SetValue("return_code", "FAIL"); _returnErrResult.SetValue("return_msg", "ERR"); return _returnErrResult.ToXml(); } //ToDo 查询数据库订单金额与参数中的金额对比,以及修改数据库订单状态 WxPayData _returnResult = new WxPayData(); _returnResult.SetValue("return_code", "SUCCESS"); _returnResult.SetValue("return_msg", "OK"); return _returnResult.ToXml(); }
|
请发表评论