1. 程式人生 > >ThinkPHP5.0整合微信掃碼支付(PC端)

ThinkPHP5.0整合微信掃碼支付(PC端)

前兩天發現微信官方測試掃碼支付的連結崩了,公益404了,http://paysdk.weixin.qq.com,微信也不說一聲,這讓使用這個連結生成二維碼的使用者情何以堪......只好下載官方的demo放到自己網站上生成二維碼了。

趁熱打鐵,把微信支付demo整合到tp5裡面,實現微信掃碼支付~~~

下載demo,目錄結構如下:

lib 資料夾拿出來,放到tp5根目錄 vendor 資料夾下,重新命名為wxpay:

 把 example 資料夾下的 WxPay.Config.php 拿出來,放到wxpay目錄下,修改require_once,並配置支付引數:

<?php

require_once "WxPay.Config.Interface.php";
class WxPayConfig extends WxPayConfigInterface
{
    //APPID
    public function GetAppId()
    {
        return 'xxx';
    }

    //商戶號
    public function GetMerchantId()
    {
        return 'xxx';
    }

    //支付回撥url
    public function GetNotifyUrl()
    {
	return "xxx";
    }

    //簽名和驗證簽名方式, 支援md5和sha256方式
    public function GetSignType()
    {
	return "HMAC-SHA256";
    }

    //curl代理
    public function GetProxy(&$proxyHost, &$proxyPort)
    {
	$proxyHost = "0.0.0.0";
	$proxyPort = 0;
    }

    //上報錯誤等級
    public function GetReportLevenl()
    {
	return 1;
    }

    //KEY:商戶支付金鑰
    public function GetKey()
    {
	return 'xxx';
    }

    //APPSECRET:公眾帳號secert
    public function GetAppSecret()
    {
	return 'xxx';
    }

    //證書路徑
    public function GetSSLCertPath(&$sslCertPath, &$sslKeyPath)
    {
	$sslCertPath = 'http://www.xxx.com/cert/apiclient_cert.pem';
	$sslKeyPath = 'http://www.xxx.com/cert/apiclient_key.pem';
    }
}

關於證書存放位置:

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

require_once "WxPay.Config.php";

Wxpay.php控制器:

<?php
namespace app\index\controller;
use think\Controller;
class Wxpay extends Controller
{
    public function index(){
        header("Content-type:text/html;charset=utf-8");

        require VENDOR_PATH.'/wxpay/WxPay.Api.php'; //引入微信支付
        $input = new \WxPayUnifiedOrder();//統一下單
        $config = new \WxPayConfig();//配置引數

        //$paymoney = input('post.paymoney'); //支付金額
        $paymoney = 1; //測試寫死
        $out_trade_no = 'WXPAY'.date("YmdHis"); //商戶訂單號(自定義)
        $goods_name = '掃碼支付'.$paymoney.'元'; //商品名稱(自定義)
        $input->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/wxpaynotifyurl"); //回撥地址
        $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下面:

然後頁面中使用img標籤載入二維碼即可:

<img class="wxpay_img" src="/qrcode.php?data={$url}" alt="掃碼支付">

測試生成了一個二維碼(這裡做了馬賽克處理):


掃碼支付測試: