最近工作比较轻松。我帮助一个基于ecshop的朋友商城添加了微信扫描支付功能。我认为这是一件非常简单的事情。下载官方sdk或开发帮助文档。按照内心的想法去做是可以的。谁知道花了两三天才完成。中间我也在网上找到了很多有问题的技术文章,但是发现他们只是粗略的写了自己是如何开发和访问的,并没有解决我遇到的问题.唉。
这篇文章只是想把我遇到的问题和解决方法写出来,让在这方面做开发的朋友可以帮忙!
开发前,查看【扫码支付】的官方开发文档。扫码支付可分为以下两种模式:
模式1 :
遇到的问题:第一次扫描二维码仍然可以正常扫描,不付款再次扫描会提示:ok或请求商家信息超时。HttpCode不是200——。试图通过各种渠道找到解决这个问题的办法,但都失败了。希望朋友们能在这里给出答案。谢谢大家!
模式2 :
注意:不能直接使用商城的订单号作为交易订单号(out_trade_no),否则当微信扫码支付二维码再次生成时,界面会提示商家订单号重复,无法重新生成。
那么,当酱紫色问题来临时,我们应该如何设置交易订单号,保证微信商家平台中对应的订单信息以后可以通过界面查询或对账呢?可行的方法是:统一订单界面在扫码前,out_trade_no,不传入商城订单系统的订单号,而是重新生成一个新的唯一流;添加对应的订单号和微信支付交易订单号表(out_trade_no),如下:
上表中有一个serial _ is _ paid字段,用于标记交易是否已经完成,即在支付成功通知的回拨过程中,根据返回的out_trade_no更新支付状态;至于如何查看订单付款状态,我想你也应该知道.
好了,好久没写技术博客了。有些人感觉不到,但可能很粗糙。一些不清楚的朋友可以注意沟通!
到处都是坑的微信支付V3微信支付回拨页面
根据上次满坑的微信支付V3,很多园区朋友在被滥用了上千次后终于跳到了友好的微信支付界面,但是输入密码支付后却不知道如何处理,之后又增加了支付后的处理流程。
1.前台付款后根据反馈信息成功跳转到html相关页面
if(RES . err _ msg==' get _ brand _ wcpay _ request : ok '){//message : '微信支付成功!',window.location.replace('@Url。内容(' ~/WxPay/成功?[email protected](model . order _ no)');} else if(RES . err _ msg==' get _ brand _ wcpay _ request 3360 cancel '){//message : '微信支付已取消!2.下载微信支付接口文档和演示(公众账号)。来自支付发展教程的zip(微信商家平台版)
参考第4.2节。接口文档中返回参数的常规通知接口。
通知网址是第4.1节中提交的参数notify_url。支付完成后,微信会将相关和用户信息发送到该网址,商家需要接收处理信息。
//支付回调页面public action result notice _ URL(){字符串结果来自wx=GetPostStr();//设置支付参数请求处理程序paySignReqHandler=新的请求处理程序(null);WriteLog(")微支付注意来自wx的结果='来自wx的结果');var res=XDocument .解析(result from wx);//通信成功if (res.Element('xml ').元素(“return_code”).value==' SUCCESS '){ if(RES . Element(' XML ').元素(“result_code”).Value=='SUCCESS') { //交易成功支付签名请求处理程序.SetParameter('return_code ',' SUCCESS ');支付签名请求处理程序.SetParameter('return_msg ',' OK ');字符串或解码元素.元素(' out_trade_no ').价值;BLL。订单Bll=新Bll。orders();尝试{ if (Bll .Update(ordecode )) { WriteLog('微支付交易成功=' ordecode);} else { WriteLog('微支付交易失败=' ordecode);} } catch(Exception ex){ WriteLog(ex,)微支付交易异常=' ordecode);} } else { paySignReqHandler .SetParameter('return_code ',' FAIL ');支付签名请求处理程序.SetParameter('return_msg ','交易失败');} } else { paySignReqHandler .SetParameter('return_code ',' FAIL ');支付签名请求处理程序.SetParameter('return_msg ','签名失败');}字符串数据=paySignReqHandler .ParseXML();定义变量结果=TenPayV3 .统一订单(数据);WriteLog(")微支付注意结果=' result ');返回视图();}注意:
因此接收到成功支付后需要返回代码中红色的部分来提醒微信服务器已处理,否则会不断收到微信服务器的反馈。
getPostStr()方法:
//获得邮政过来的数据公共字符串getPostStr(){ int 32 int len=Convert .至32(请求。输入流长度);字节[] b=新字节[int len];请求输入流。Read(b,0,int len);返回系统文本。编码。utf8。get string(b);}现在前后台都打通了,主要还是要耐心调试,祝君好运~