微信扫码支付分为两种模式,
模式一比较复杂,需要公众号配置回调地址。
模式二比较简单,只需要在代码中配置回调地址就可以了。
我这次使用的是模式二。
需要配置参数,
const APPID=' xxxconst MCHID=' xxxconst KEY=' xxxconst APPSECRET=' XXX '配置公众号的appid,appsecret。以及微信支付的mchid与钥匙。
生成二维码,这个页面需要自己去美化,不像支付宝那样自带效果。
要求一次./phpcms/plugin/weixin pay/lib/Wxpay .API。PHP ';要求一次./phpcms/plugin/weixin pay/example/wx pay .本土派。PHP ';要求一次./phpcms/plugin/Weixi pay/example/log。PHP ';$ input=new wxpayunifieorder();$input-SetBody('预订$product_info['name']。订单');$input-SetAttach('预订$product_info['name'].'订单');$ input-Setout _ trade _ no($ order _ info[' order no ']);$ input-SetTotal _ fee($ order _ info[' pay price ']* 100);$ input-SetTime _ start(date(' YmdHis '));$ input-SetTime _ expire(date(' YmdHis ',time()600));$ input-SetGoods _ tag(' ');$ input-SetNotify _ URL(' http://www。阿尤恩杜阿祖。com/wx支付/通知。PHP’);//地址是外网能访问的,且不能包含参数$ input-SetRade _ type(' NAtive ');$ input-SetProducT _ id($ ProducT _ info[' id ']);$ notify=new nativePay();$ result=$ notify-GetPayUrl($ input);$ code _ URL=$ result[' code _ URL '];img alt='扫码支付src=' http :http://付费SDK。微信。QQ。com/示例/二维码。PHP?data={ URL encode($ code _ URL)} ' style=' width :150 px;高度:150 px /这里的回调地址很有讲究,扫码支付成功后,微信会自动调用这个地址。这个地址不能包含任何参数,否则调用失败。啥都看不到!
微信调用的时候,会传递可扩展标记语言类型的参数。
包含一次./phpcms/base。PHP ';//处理回调数据错误报告;"需要一次"./phpcms/plugin/weixin pay/lib/Wxpay .API。PHP ';"需要一次"./phpcms/plugin/weixin pay/lib/Wxpay .通知。PHP ';"需要一次"./phpcms/plugin/Weixi pay/example/log。PHP ';//初始化日志$logHandler=new CLogFileHandler('./log/' .日期(' Y-m-d '). log ');$ log=log : init($ log handler,15);类付款通知回拨扩展了WxPayNotify//查询订单公共函数query order($ transaction _ id){ $ input=new WxPayOrderQuery();$ input-SetTransaction _ id($ transaction _ id);$ result=wxpayapi :订单查询($ input);Log:DEBUG('query: ' .JSON _ encode($ result));if(array _ key _ exists(' return _ code ',$ result)array _ key _ exists(' result _ code ',$ result)$ result[' return _ code ']==' SUCCESS ' $ result[' result _ code ']==' SUCCESS '){ return true;}返回false}//重写回调处理函数公共函数NotifyProcess($data,$ msg){ log : debug('回调: ' .JSON _ encode($ data));$ NotFiyoutput=array();if(!array _ key _ exists(' transaction _ id ',$data)){$msg='输入参数不正确;返回false}//查询订单,判断订单真实性if(!$ this-Queryorder($ data[' transaction _ id ']){ $ msg='订单查询失败;返回false}返回true}日志:调试(' begin notify ');$ notify=new PayNotifyCallBack();$ ilog _ db=PC _ base : load _ model(' ilog _ model ');$ order _ db=PC _ base : load _ model(' order _ model ');$ PostXML=$ GLOBALS[' HTTP _ RAW _ POST _ DATA '];$ PostArr=XMltoarray($ PostXMl);//查询是否支付成功$ r=$ notify-Queryorder($ PostArr[' transaction _ id ']);if ($r) {//获取订单信息$order_info=$order_db-get_one(数组('订单号'=$ PostArr[' out _ trade _ no ']);if ($order_info['pay_status']!=' 1 '){ $ data[' pay _ status ']=' 1 ';$ data[' pay _ type ']=' weixin pay ';$ data[' pay _ code ']=$ PostArr[' transaction _ id '];$ data[' pay time ']=time();$ data[' order _ status ']=3;//已支付$order_db-update($data,array(' order no '=$ PostArr[' out _ trade _ no ']);}?通过
$ GLOBALS[' HTTP _ RAW _ POST _ DATA '];可以获取微信端传入的参数
{ ' appid ' : ' wxed 7996 e 9 ad 58345d ',' attach ' : ' u 9884 u 8 ba 2 u 5 bbfu 8 fc 1 u 00 b7u 592 au 53 e4u 91 Cu 7 F8 e 5 f 0 fu 5957 u 623 fu 8 ba 2 u 5355 ',' bank_type': 'CFT ',' cash_fee': '1 ',' fee _ type ' 3: ' CNY '
这里的一切都是异步的,二维码页面什么也看不到。
只能通过异步获取订单状态来判断操作是否成功。
//检查支付是否成功$(单据)。ready(function(){ setinterval(' Ajax status()',3000);函数Ajax status(){ var orderno=$(' # out _ trade _ no ')。val();if (orderno!=0) {$.ajax({url: '?m=homec=ordera=ajax ',type: 'GET ',dataType:'json ',data : { todo : ' AJaxcheckwxpay ',orderno: orderno,},Success3360函数(JSON) {if (JSON。状态==1){//订单状态为1,表示付款成功。layer.msg('支付成功',{Icon :1,Time 3360 2000},function(){ window . location . href='?m=homec=order a=paydonorderno=' JSON . info[' order no '];});//window . location . href=' wxscansuccessurl . action ';//页面跳转} } });}}每三秒一次。如果成功,则执行跳转处理。
礼品功能
*函数:数组到XML */函数arraytoxml($ arr)$ XML=' XML ';foreach($ arr as $ key=$ val){ if(is _ numeric($ val)){ $ XML。=''.$key。''.$瓦尔。'/'.$key。'';}else$xml。=''.$key。[CDATA[。$瓦尔。']]/'.$key。'';}$xml。='/XML ';返回$ xml*操作:将xml转换为数组*/函数xmltoarray($ XML){//将XML转换为数组$ array _ data=JSON _ decode(JSON _ encode(SimpleXML _ load _ string($ XML,' SimpleXML element ',libxml _ nocata)),true);返回$ array _ data}给小费
对于异步调用,如果看不到效果。您可以创建一个日志表,并将操作数据记录在表中。易于测试。支付回调是异步的,可以从日志表中的数据判断支付是否成功,回调是否被调用,调用了多少次。
总结:
微信扫码支付不如支付宝扫码支付方便。你需要自己做很多事情。
以上是边肖介绍的PHP微信扫码支付接入的总结(汇总)。数据库显示了空白的完美解决方案(图形教程)。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!