博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们!
首先还是先给大家上效果图吧(样式我也会一并给大家的,漂亮吧?骚年们!)!
各位骚年们~请不要着急往下看代码,先给大家解释怎么获取到的二维码
上面的这图,用到了Jquery,Layer这两个js,大家请自己下载一下(链接自己点文字就行)。
整个流程简绍:点击支付后调用layer弹出窗口->ajax获取支付的二维码->轮询支付状态!
补充!不要当心轮询占用服务器资源的问题~因为假如同时有上万人等着支付的话,我相信你公司不会缺服务器这点小钱了!所以放心用吧!另外~按照我的逻辑来说应该是非常安全。请大家耐心看下去,虽然代码拿去就能用!但还是希望授之以渔!
ok!下面正式开始了哟!~大家注意仔细阅读代码。
第一步 首先把官方的微信demo下载下来进行配置部署
给大家个传送门-> PHP微信支付demo下载
拿到文件后解压,解压后把文件夹改名为payment(也可以随意改,但是博主觉得这样规范点!)而后上传至项目的根目录,各位大佬不知道什么是根目录就请看这(/).其实我是逗你们的。 而后进入微信的商户后台,设置api的key注意看下图(网上随意找的~丑了点,将就吧!)设置完后,下载证书文件。而后把证书解压出来!放到微信支付demo里面,也就是上一步上传服务器的demo文件夹中!下面是详细步骤:
设置密钥(如图)
下载证书,得到压缩文件夹,解压后上传到payment中的cert中!(如图,图上有路径)
在此顺便给logs文件夹(支付日志)一个写入的权限
修改微信支付demo中的配置文件WxPay.Config.php(如图:路径)
第一步分的配置咋们就完成了,请各位大佬继续跟着小的往下走!
第二部 调整前段代码 大部分都是JS,不懂JS得直接略过吧,否则看着难受!
对于点击后弹出支付的这一块逻辑,撸主的思路是:点击支付按钮->执行Ajax获取到二维码展示在页面->开始执行轮询获取支付状态;(撸主虽然JS很菜,但是每一条代码后面都会注释给大家,比我菜的可以看一下)
创建获取二维码的文件 getPayQrcode.php
<?php // 放入老衲前不久写的curl函数 用curl方法获取二维码 function curlGet($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); return curl_exec($ch); } // 正式流程开始 返回的二维码是带信息的,所以需要先接收商品信息 // 比如:我是get过来商品的id,而后再进行查询数据库;这里大家随意; $goodsId = $_GET[\'goodsId\']; // 利用商品ID查询到商品名称和价格 $goodsName = \'好日子牌姨妈巾\'; $goodsPrice = \'250\'; // 下面构造请求二维码的链接(由于是获取二维码支付,所以咋们请求的是native.php;后面会对该文件进行详细讲解) $url = \'http://www.baidu.com/payment/example/native.php?goodsName=http://www.likecs.com/\'.$goodsName.\'&goodsPrice=http://www.likecs.com/\'.goodsPrice; // 执行curlGet()函数 $data = curlGet($url); // preg_match_all函数进行全局正则表达式匹配,获取到二维码的链接。 preg_match(\'/<\s*img\s+[^>]*?src\s*=http://www.likecs.com/\s*(\\'|\")(.*?)\\1[^>]*?\/?\s*>/i\',$data,$matches); preg_match(\'/\|\|(.*)\|\|/\',$matches[0],$aac); // 构造返回信息 $obj[\'status\'] = \'success\'; $obj[\'code\'] = $aac[1]; // 此值为返回交易码【用来确认订单支付状态的】 $obj[\'price\'] = $goodsPrice; $obj[\'msg\'] = \'/payment/example/\'.$matches[\'2\']; // 请求返回的二维码 return json_encode($obj);// 返回json // 获取二维码的文件已经ok!继续下一步