要实现原生扫码支付功能,前提已经完成了[微信平台支付配置](微信平台支付配置.md) # 模式一开发实现流程 ## 第一步:获取二维码 获取到的二维码链接已自动进行转换短链接操作,减小二维码数据量,提升扫描速度和精确度。 获取的方法如下: ~~~ $appid = '你的公众号appid'; $product = [ 'product_id'=>'商户定义的商品id 或者订单号', 'body'=>'商品简单描述', 'out_trade_no'=>'商户系统内部订单号,要求32个字符内、且在同一个商户号下唯一', 'total_fee'=>'订单总金额,单位为分' ]; $callback = '支付成功后的回调地址'; $type = 1; //模式一 $scan = D('Common/Payment')->scan_pay($appid, $product, $callback, $type); if ($scan['status'] == 0) { $this->error($scan['msg']); } $this->assign('qrcode', $scan['short_url']); ~~~ prodect数组是传递最基本的商品参数,同时也支持传递更多微信支付里的[统一下单](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)接口里的参数 参数body请按照规范传递,具体请见[参数规则](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_2) 其中回调地址的格式:应用名/model类名/方法名,如:weixin/Service/payok type的值是 1或者2,1表示模式一,2表示模式二,默认是2 ## 第二步:显示二维码 在前台HTML里可以通过WeiPHP自带的JS库生成并显示二维码: ~~~ <script type="text/javascript" src="__STATIC__/qrcode/qrcode.js"></script> <script type="text/javascript" src="__STATIC__/qrcode/jquery.qrcode.js"></script> <div id="qrCode"></div> <script type="text/javascript"> var textLink = "{$qrcode}"; $('#qrCode').qrcode({width:150,height:150,text:textLink}); </script> ~~~ ## 第三步:异步接收支付结果 参考 [异步接收支付结果](异步接收支付结果.md) # 模式二开发实现流程 模式二的开发流程同模式一。 ## 第一步:获取二维码 同模式一,只需要把type参数修改为2,然后二维码的地址修改为: 获取的方法如下: ~~~ $appid = '你的公众号appid'; $product = [ 'product_id'=>'商户定义的商品id 或者订单号', 'body'=>'商品简单描述', 'out_trade_no'=>'商户系统内部订单号,要求32个字符内、且在同一个商户号下唯一', 'total_fee'=>'订单总金额,单位为分' ]; $callback = '支付成功后的回调地址'; $type = 2; //模式二 $scan = D('Common/Payment')->scan_pay($appid, $product, $callback, $type); if ($scan['status'] == 0) { $this->error($scan['msg']); } $this->assign('qrcode', $scan['code_url']); ~~~ ## 第二步:显示二维码 同模式一 ## 第三步:异步接收支付结果 参考 [异步接收支付结果](异步接收支付结果.md)