手机版

ThinkPHP框架集成微信支付Native扫码支付模式-图文详解

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

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

大家好,本文是继jsapi之后微信支付系列的第二篇教程:扫码支付模式一介绍目前扫码支付有两种模式。模式一比模式二稍微复杂一点。至于模式一和模式二的具体内容、流程和微信开发文档,都有详细的介绍,这里就不废话了,接下来就赶紧去教程了。

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

接下来是公共下的文件:

这里的配置与JSAPI支付相同,不需要更改

文件具体介绍请参考JSAPI付费,链接地址://www . JB 51 . net/article/159351 . htm此处不再说明

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

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

/* * * initialize */public function _ initialize(){//介绍wxpaypubhelper厂商(' wxpaypubbhelper . wxpaypubbhelper ');}第二步:要显示扫码页面,老师需要保存二维码链接

Publicfunctionnative_pay(){//设置静态链接$ nativeLink=new \ nativeLink _ pub();//设置静态链接参数//设置所需参数//appid已填写,商户无需填写//mch_id已填写,商户无需填写//non estr,商户无需填写//time_stamp,商户无需填写//sign,商户无需填写$ product _ ID=c(' wxpayconf _ _//自定义商品ID $ nativelink-Set parameter(' product _ ID ',$ product _ ID);//商品id//获取链接$ product _ URL=$ nativelink-geturl();//使用短链接转换接口$ short URL=new \ short URL _ pub();//设置所需参数//appid已填写,但商家无需再次填写//mch_id已填写,商家无需再次填写//non estr,商家无需再次填写//sign已填写,商家无需重复填写$ short URL-设置参数(' long _ URL ',$ product _ URL);//URL链接//获取短链接$ codeUrl=$ short URL-getshort URL();$this-assign('product_url ',$ product _ URL);$this-assign('codeUrl ',$ codeUrl);$ this-display();}以上代码对应native_pay.html页面

!doctypehtmltownetacharset=' utf-8 ' title微信安全支付/title/headsdydivalin=' center ' id=' QR code ' PS can me。scan me/p/div divalin=' center ' a href=' # ' rel=' external nofollow '返回主页/a/div/body script src=' http 3360 _ _ public _ _/js/QR code . js '/scriptscriptvarurl='?phpecho $ product _ url?';//参数1表示图像大小,取值范围为1-10;参数2代表质量,取值范围为' l ',' m ',' q ',' h' var QR=qrcode (10,' m ');QR . AddDATa(URL);QR . make();vardom=document . create element(' DIV ');DOM . innerhtml=QR . createimgtag();varelement=document . getelementbyid(' QR code ');element . appendchild(DOM);/script/html注意这里生存二维码的JS地址。我把它放在公共下的js目录中

第三步:扫码后会提交到我们公共平台原生配置的地址处理公共平台原生配置:配置地址http://你的域名/pay/index . PHP/home/wXNative/to opost

控制器中有相应的todoPost方法:

public functiontoopost(){//以原木文件形式记录回调信息,用于调试$log_name=__ROOT__ ./Public/native _ call。日志';//使用当地的通知接口$ native call=new \ native call _ pub();//接收微信请求$ XML=$ GLOBALS[' HTTP _ RAW _ POST _ DATA '];log_result($log_name,'【接收到的当地的通知】: \ n ' .$xml .\ n ');$原生调用-SaveDATa($ XML);if($ nativeCall-checkSign()==FALSE){ $ nativeCall-set返回参数(' return _ code ',' FAIL ');//返回状态码$ native调用集返回参数(' return _ msg ','签名失败');//返回信息}else{//提取product _ id $ product _ id=$ nativeCall-GetProductID();//使用统一支付接口$ unified order=new \ unified order _ pub();//根据不同的$产品_id设定对应的下单参数,此处只举例一种switch($ product _ id){ CaSec '(WxpayConf _ pub).APPID ').static'://与native_call_qrcode.php中的静态链接二维码对应//设置统一支付接口参数//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//非estr已填,商户无需重复填写//spbill_create_ip已填,商户无需重复填写//符号已填,商户无需重复填写$统一订单集参数(' body ','贡献一分钱');//商品描述//自定义订单号,此处仅作举例$ TiMer=time();$out_trade_no=C('WxPayConf_pub .APPID ').$ TiMer$统一订单集参数(' out _ trade _ no ',$ out _ trade _ no);//商户订单号$ UnifiedOrder-SetParameter(' product _ id ',' $ product _ id ');//商品ID $统一订单集参数(' total _ fee ',' 1 ');//总金额$统一订单集参数(' notify _ URL ',C('WxPayConf_pub .NOTIFY _ URL’);//通知地址$ unified order-set参数(' trade _ type ',' NATIVE ');//交易类型$统一订单集参数(' product _ id ',$ product _ id);//用户标识//非必填参数,商户可根据实际情况选填//$统一订单集参数(' sub _ mch _ id ',' XXXX ');//子商户号//$统一订单集参数(' device _ info ',' XXXX ');//设备号//$统一订单集参数(' attach ',' XXXX ');//附加数据//$统一订单集参数(' time _ start ',' XXXX ');//交易起始时间//$统一订单集参数(' time _ expire ',' XXXX ');//交易结束时间//$统一订单集参数(' goods _ tag ',' XXXX ');//商品标记//$统一订单集参数(' OpenID ',' XXXX ');//用户标识//获取prevable _ id $ prevable _ id=$ unified order-GetPrevable id();//设置返回码//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//非estr已填,商户无需重复填写//符号已填,商户无需重复填写$ nativeCall-setReturnParameter(' return _ code ',' SUCCESS ');//返回状态码$ nativeCall-setReturnParameter(' result _ code ',' SUCCESS ');//业务结果$ nativeCall-setReturnParameter(' prevable _ id ',$ prevable _ id);//预支付IDbreakdefault://设置返回码//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//非estr已填,商户无需重复填写//符号已填,商户无需重复填写$ nativeCall-setReturnParameter(' return _ code ',' SUCCESS ');//返回状态码$ nativeCall-setReturnParameter(' result _ code ',' FAIL ');//业务结果$ nativeCall-setReturnParameter(' err _ code _ des ','此商品无效');//业务结果打破;}}//将结果返回微信$ return XML=$ nativeCall-return XML();log_result($log_name,'【返回微信的当地的响应】: \ n ' .$returnXml .\ n ');echo $ returnXml}其实到这里你已经完成了扫码支付模式一的功能

步骤4:接下来写一下异步通知处理,与支付插件支付一样:

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的详细教程也将在下面介绍

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

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

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

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

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

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