微信扫码支付分为两种模式:
模式一比较复杂,需要公众号配置回调地址。
模式二比较简单,只需要在代码中配置回调地址就可以了。
这里使用的是模式二
微信扫码支付和公众号JSAPI支付前期准备工作一样,请参考:http://www.cnblogs.com/chenjiacheng/p/6522600.html
ini_set('date.timezone','Asia/Shanghai'); //error_reporting(E_ERROR); require_once "../lib/WxPay.Api.php"; require_once "WxPay.NativePay.php"; require_once 'log.php'; $notify = new NativePay(); //模式二 /** * 流程: * 1、调用统一下单,取得code_url,生成二维码 * 2、用户扫描二维码,进行支付 * 3、支付完成之后,微信服务器会通知支付成功 * 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php) */ $input = new WxPayUnifiedOrder(); $input->SetBody("test"); // 订单标题 $input->SetAttach("test"); // 订单描述 $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); // 订单号 $input->SetTotal_fee("1"); // 订单金额 $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag("test"); $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php"); // 异步通知地址 $input->SetTrade_type("NATIVE"); $input->SetProduct_id("123456789"); $result = $notify->GetPayUrl($input); $url2 = $result["code_url"];
生成二维码,这个页面需要自己去美化。
<img alt="模式二扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url2);?>" style="150px;height:150px;"/>
查询是否已支付,支付完成的话,进行订单数据处理。
这里的一切都是异步的,二维码页面啥都看不到。
只能通过异步获取订单状态来判断是否操作成功。
三秒执行一次,如果成功,进行跳转处理。
// 检测是否支付成功 $(document).ready(function () { setInterval("ajaxstatus()", 3000); }); function ajaxstatus() { var orderno = $("#out_trade_no").val(); if (orderno != 0) { $.ajax({ url: "?m=home&c=order&a=ajax", type: "GET", dataType:"json", data: { todo: 'ajaxCheckWxPay', orderno: orderno, }, success: function (json) { if (json.status == 1) { //订单状态为1表示支付成功 layer.msg('支付成功',{icon:1,time: 2000},function(){ window.location.href = "?m=home&c=order&a=payDone&orderno="+json.info['orderno']; }); // window.location.href = "wxScanSuccessUrl.action"; //页面跳转 } } }); } }