手机版

ThinkPHP框架集成了微信支付的Native扫码支付模式 2图形细�

时间:2021-08-26 来源:互联网 编辑:宝哥软件园 浏览:

本文描述了集成微信支付的ThinkPHP框架的Native扫码支付模式2。分享给大家参考,如下:

大家好,本文是继微信支付的Native扫码支付模式I:扫码支付的第二种模式之后,微信支付系列教程的第三部分

导读:目前有两种扫码支付方式。模式1比模式2稍微复杂一些。至于模式一和模式二的具体内容、流程和微信开发文档,都有详细的介绍,这里就不废话了,接下来就赶紧去教程吧!

首先我们还是老样子,导入微信支付的类库:

接下来是公共下的文件:

以上与Native扫描模式1相同,但如果您不理解,请参见//www . JB 51 . net/article/159356 . htm。

有关jsAPI支付,请参见://www . JB 51 . net/article/159351 . htm

接下来,直接看控制器部分的代码:

第一步:同样,首先初始化并引入WxPayPubHelper类库

/* * * initialize */public function _ initialize(){//介绍wxpaypubhelper厂商(' wxpaypubbhelper . wxpaypubbhelper ');}第二步:这与扫码支付模式不同:根据订单产生二维码,使用统一的支付接口。请查看代码:

public functioncreateqrcode(){//使用统一支付接口$ unified order=new \ unified order _ pub();//设置统一支付接口参数//设置所需参数//appid已填写,商户无需填写//mch_id已填写,商户无需填写//non estr已填写,商户无需填写//spbill_create_ip已填写,商户无需填写//sign已填写,商户无需填写$统一订单-设置参数(' body)//商品说明//定制订单号,这里只是举例$ timeStamp=time();$out_trade_no=C('WxPayConf_pub。APPID '),'$ TiMer ';$ unified order-set parameter(' out _ trade _ no ',' $ out _ trade _ no ');//商户订单号$统一订单-设置参数(' total _ fee ',' 1 ');//总金额$统一订单集参数(' notify _ URL ',c ('wxpayconf _ pub。notify _ URL’);//通知地址$统一订单集参数(' trade _ type ',' native ');//交易类型//非必输参数,商家可根据实际情况选择//$统一订单设置参数(' sub _ mch _ id ',' xxxx ');//子商户号//$统一订单集参数(' device _ info ',' xxxx ');//设备编号//$统一订单集参数(' attach ',' xxxx ');//附加数据//$统一订单集参数(' time _ start ',' xxxx ');//交易开始时间//$统一订单集参数(' time _ expire ',' xxxx ');//交易结束时间//$统一订单集参数(' goods _ tag ',' xxxx ');//商品标识//$统一订单集参数(' OpenID ',' xxxx ');//用户id//$统一订单集参数(' product _ id ',' xxxx ');//商品ID//获取统一支付接口结果$ unified order result=$ unified order-Get result();//商家根据实际情况设置相应的处理流程if($ unified order result[' return _ code ']=' fail '){//商家添加处理流程echo' communication error:'。$ unified order result[' return _ msg ']'br ';} else if($ unified order result[' result _ code ']=' fail '){//商家添加处理流echo '错误码:'。$ unified order result[' err _ code ']”br ';“Echo”错误代码描述:“”。$ unified order result[' err _ code _ des ']'br ';} else if($ unifieorderresult[' code _ URL ']!=NULL){//从统一支付接口获取code _ URL $ code _ URL=$ unifiedorderresult[' code _ URL '];//商家自行添加处理流程/.} $ this-assign ('out _ trade _ no ',$ out _ trade _ no);$this-assign('code_url ',$ code _ URL);$ this-assign(' unifiedOrderResult ',$ unifiedOrderResult);$this-display('二维码');}对应qrcode.html页面:

!doctypehtmltownetacharset=' utf-8 ' title微信安全支付/title/headsdydivalin=' center ' id=' QR code '/divalin=' center ' pNo。phpecho $ out _ trade _ no?/p/div divalin=' center ' formation='。/order _ query . PHP ' method=' post ' input name=' out _ trade _ no ' type=' hidden ' value='?phpecho $ out _ trade _ no?Buttontype='submit '查询订单状态/button/form/div brdivalin=' center ' form action='。/refer.php '方法=' post '输入名称=' out _ trade _ no '类型=' hidden '值='?phpecho $ out _ trade _ no?输入名称='退款_费用'类型='隐藏'值=' 1 '按钮类型='提交'申请退款/按钮/表单/divbrdivalin=' center ' a href='./> index . PHP ' rel=' external nofollow '返回到主页/a/div/bodyscriptsrc=' http : _ _ public _ _/js/QR code . js '/script script if(?phpecho $ UnifiedOrderResult[' code _ URL ']!=空;){varurl='?phpecho $ code _ url?//参数1表示图像大小,取值范围为1-10;参数2代表质量,取值范围为' l ',' m ',' q ',' h' var QR=qrcode (10,' m ');QR . AddDATa(URL);QR . make();var措辞=document . create element(' p ');措辞. innerHTML='扫我,扫我';varcode=document . create element(' DIV ');code . innerhtml=QR . createimgtag();varelement=document . getelementbyid(' QR code ');element.appendChild(措辞);element.appendChild(代码);}/script/html模式2不需要配置公共平台,所以这里简单明了

步骤3:异步通知在这里是相同的:

Publicfunctionnotify(){//使用通用通知接口$ Notify=new \ Notify _ pub();//Store微信回调$ XML=$ globals[' http _ raw _ post _ data '];$ notify-SaveDATa($ XML);//验证签名并回复微信。//与后台通知交互时,如果微信收到商家未成功或超时的回复,则认为通知失败。//微信会通过一定的策略定期重新发起通知(比如30分钟8次),//尽量提高通知的成功率,但微信不保证通知最终会成功。if($ notify-checkSign()==FALSE){ $ notify-setReturnParameter(' return _ code ',' FAIL ');//返回状态代码$ notify-set Return parameter(' Return _ msg ','签名失败');//返回信息} else { $ notify-set return parameter(' return _ code ',' success ');//设置返回代码} $ return XML=$ notify-return XML();echo $ returnXml//==商家根据实际情况设置相应的处理流程。这里只是一个例子======//以日志文件的形式记录回调信息//$ log _=newLog _();$log_name=__ROOT__。/Public/notify _ URL . log ';//日志文件路径$this-log_result($log_name,'[通知已收到] :\n '。$xml。\ n ');if($ notify-check sign()==true){ if($ notify-data[' return _ code ']=' fail '){//这里应该更新订单状态,商家应该添加和删除操作日志_result($log_name,'[通讯错误] : \ n }否则if($ notify-data[' result _ code ']=' fail '){//这里应该更新订单状态,商家应该添加和删除操作日志_result($log_name,[业务错误] : \ n '。$xml。\ n ');}else{//订单状态应该在这里更新,商家可以添加和删除log_result($log_name,'[支付成功] :\n '。$xml。\ n ');}//商家添加自己的处理流程,//比如:更新订单状态//比如:数据库操作//比如:推送支付完成信息}}这样模式2的扫码支付就OK了,是不是比较简单?

以下是测试截图:

扫描代码截图:

扫描代码结果:

如果你有任何问题,请留言。下面还会介绍微信支付卡支付的详细教程

微信支付教程jsapi://www . JB 51 . net/article/159351 . htm

微信支付教程扫码方式1://www . JB 51 . net/article/159356 . htm

微信支付教程刷卡支付://www . JB 51 . net/article/159401 . htm

更多对thinkPHP感兴趣的读者可以查看本网站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》、《PHP模板技术总结》、0103010。

希望本文对基于ThinkPHP框架的PHP编程有所帮助。

版权声明:ThinkPHP框架集成了微信支付的Native扫码支付模式 2图形细�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。