ThinkPHP5.0集成微信扫码支付(PC端)

前两天发现微信官方测试扫码支付的链接崩了,公益404了,http://paysdk.weixin.qq.com,微信也不说一声,这让使用这个链接生成二维码的用户情何以堪......只好下载官方的demo放到自己网站上生成二维码了。

趁热打铁,把微信支付demo集成到tp5里面,实现微信扫码支付~~~

下载demo,目录结构如下:

ThinkPHP5.0集成微信扫码支付(PC端)_第1张图片

lib 文件夹拿出来,放到tp5根目录 vendor 文件夹下,重命名为wxpay:

ThinkPHP5.0集成微信扫码支付(PC端)_第2张图片

 把 example 文件夹下的 WxPay.Config.php 拿出来,放到wxpay目录下,修改require_once,并配置支付参数:

关于证书存放位置:

ThinkPHP5.0集成微信扫码支付(PC端)_第3张图片

修改 WxPay.Api.php 第二个require_once:

require_once "WxPay.Config.php";

Wxpay.php控制器:

SetBody($goods_name);
        $input->SetAttach($goods_name);
        $input->SetOut_trade_no($out_trade_no);
        $input->SetTotal_fee($paymoney*100);//金额乘以100
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("http://www.xxx.com/wxpaynotify"); //回调地址
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id("123456789");//商品id
        $result = \WxPayApi::unifiedOrder($config, $input);

        if($result['result_code']=='SUCCESS' && $result['return_code']=='SUCCESS') {
            $url = $result["code_url"];
            $this->assign('url',$url);
        }else{
            $this->error('参数错误'); 
        }
        return view();
    }
}

前台要生成扫码支付的二维码。把demo中 example 文件夹下的 phpqrcode文件夹 qrcode.php 拿出来,我放到了项目根目录/public下面:

ThinkPHP5.0集成微信扫码支付(PC端)_第4张图片

然后页面中使用img标签加载二维码即可:

扫码支付

测试生成了一个二维码(这里做了马赛克处理):

ThinkPHP5.0集成微信扫码支付(PC端)_第5张图片
扫码支付测试:

ThinkPHP5.0集成微信扫码支付(PC端)_第6张图片

 

【补充】 

应邀加个支付成功回调:

public function wxpaynotify() {
    // 获取微信回调的数据
    $notifiedData = file_get_contents('php://input');

    //XML格式转换
    $xmlObj = simplexml_load_string($notifiedData, 'SimpleXMLElement', LIBXML_NOCDATA);
    $xmlObj = json_decode(json_encode($xmlObj), true);

    //支付成功
    if ($xmlObj['return_code'] == "SUCCESS" && $xmlObj['result_code'] == "SUCCESS") {
        foreach ($xmlObj as $k => $v) {
            if ($k == 'sign') {
                $xmlSign = $xmlObj[$k];
                unset($xmlObj[$k]);
            };
        }
        $sign = $this->WxSign($xmlObj);
        if ($sign === $xmlSign) {
            $trade_no = $xmlObj['out_trade_no']; //商户自定义订单号
            $transaction_id = $xmlObj['transaction_id']; //微信交易单号

            //省略订单处理逻辑...

            //返回成功标识给微信
            return sprintf("");
        }

    }
}

//微信签名算法
private function WxSign($param)
{
    $signkey = 'xxx';//秘钥
    $sign = '';
    foreach ($param as $key => $val) {
        $sign .= $key . '=' . $val . '&';
    }
    $sign .= 'key=' . $signkey;
    $sign = strtoupper(MD5($sign));
    return $sign;
}

 

你可能感兴趣的:(PHP,ThinkPHP,ThinkPHP,微信支付,微信扫码支付)