thinkphp整合系列之微信扫码支付

微信作为移动互联网的航空母舰;
在支付发力后;现在也是不容小觑的;
在线下的很多场景中比支付宝更甚;
君不见连路边的小贩都支持二维码扫一扫支付了;
此处是省略500字的微信支付开通过程;
示例项目:https://github.com/baijunyao/thinkphp-bjyadmin
一:导入sdk
/ThinkPHP/Library/Vendor/Weixinpay
鹅厂的sdk那酸爽谁用谁知道;就不吐槽了;项目中的sdk是我根据官方文档重构精简打造而成的;
二:配置项
/Application/Common/Conf/config.php

'WEIXINPAY_CONFIG'       => array(
    'APPID'              => '', // 微信支付APPID
    'MCHID'              => '', // 微信支付MCHID 商户收款账号
    'KEY'                => '', // 微信支付KEY
    'APPSECRET'          => '', // 公众帐号secert (公众号支付专用)
    'NOTIFY_URL'         => 'http://baijunyao.com/Api/Weixinpay/notify', // 接收支付状态的连接
    ),

开通微信支付后;会收到一封包含账号密码的邮件;登录微信支付凑齐上面这些参数;
三:支付函数
/Application/Common/Common/function.php

/**
 * 微信扫码支付
 * @param  array $order 订单 必须包含支付所需要的参数 body(产品描述)、total_fee(订单金额)、out_trade_no(订单号)、product_id(产品id)
 */
function weixinpay($order){
    $order['trade_type']='NATIVE';
    Vendor('Weixinpay.Weixinpay');
    $weixinpay=new \\Weixinpay();
    $weixinpay->pay($order);
}

调用函数会生成一个二维码;用微信扫码即可支付;

// 虚拟的订单 请根据实际业务更改
$time=time();
$order=array(
    'body'=>'test',
    'total_fee'=>1,
    'out_trade_no'=>strval($time),
    'product_id'=>1
    );
weixinpay($order);

四:异步接收通知
/Application/Api/Controller/WeixinpayController.class.php

/**
 * notify_url接收页面
 */
public function notify(){
    // 导入微信支付sdk
    Vendor('Weixinpay.Weixinpay');
    $wxpay=new \\Weixinpay();
    $result=$wxpay->notify();
    if ($result) {
        // 验证成功 修改数据库的订单状态等 $result['out_trade_no']为订单id

    }
}

和支付宝不同的是;微信支付并没有支付成功后跳转回来的过程;所以都是异步接收通知的;
//*************************收到反馈后补充的分割线*********************************
如果是整合到自己已有的项目中;则需要添加生成二维码的函数;
具体的可以参考 thinkphp整合系列之phpqrcode生成二维码

//*************************关于签名错误的拍错*********************************
如果出现签名错误;
可以使用官方的 微信公众平台支付接口调试工具
跟自己生产的签名对比;
然后对比配置;查找不一致的地方;

//*****************关于不知道怎么查看异步发过来的数据的补充*****************
2016.10.28:
好多童鞋在问支付后;不知道怎么查看接收到的支付状态通知;
这里做个补充;首先;我们的服务器必须是外网可以正常访问到的;
必须注意不能有 登录或者权限之类的拦截;
另外补充一个简单的查看收到的内容的方法用于测试;
四:异步接收通知
/Application/Api/Controller/WeixinpayController.class.php

/**
 * notify_url接收页面
 */
public function notify(){
    // ↓↓↓下面的file_put_contents是用来简单查看异步发过来的数据 测试完可以删除;↓↓↓
    // 获取xml
    $xml=file_get_contents('php://input', 'r');
    //转成php数组 禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $data= json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA));
    file_put_contents('./notify.text', $data);
    // ↑↑↑上面的file_put_contents是用来简单查看异步发过来的数据 测试完可以删除;↑↑↑
    // 导入微信支付sdk
    Vendor('Weixinpay.Weixinpay');
    $wxpay=new \\Weixinpay();
    $result=$wxpay->notify();
    if ($result) {
        // 验证成功 修改数据库的订单状态等 $result['out_trade_no']为订单id

    }
}

白俊遥博客

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共31条评论
白俊遥博客

呆呆:我想问一下,为嘛我从git上下载好你的程序,安装向导,四步安装后,跳转到界面是空白的,该怎么用呀,小白求教。

2017-03-22 11:14:01 回复

白俊遥博客

php--李小博:急 急  otify_url 返回给服务SUCCESS了 为什么还一直通知     支付成功一直返回结果一直通知。

2017-03-17 15:06:00 回复

白俊遥博客
  • 呆呆 回复 php--李小博:你是怎么调通的,为嘛我下载示例提示四步安装后啥都没有。
  • 2017-03-22 11:14:50 回复
白俊遥博客

”这一切都是错觉“:想问一下

2017-03-15 17:12:48 回复

白俊遥博客
  • php--李小博 回复 ”这一切都是错觉“:你的调试好了吗 ?otify_url 返回给服务SUCCESS了 为什么还一直通知
  • 2017-03-17 14:57:12 回复
白俊遥博客

嗓音少了许多:执行weixinpay()方法后,显示证书错误,错误码35. 统一下单中的curl还需要设置什么吗?

2017-03-05 16:12:14 回复

白俊遥博客

:????

2017-02-20 11:57:59 回复

白俊遥博客

⌒☆善☆⌒:pay.html里面的getOrder()在哪里啊,我怎么找不到啊。

2017-02-19 22:52:45 回复

白俊遥博客

哇牛:微信支付 notify_url 返回给服务SUCCESS了 为什么还一直通知

2017-01-19 16:16:29 回复

白俊遥博客