PHP-SDK实现微信付款码支付

一、实战

目前刷脸支付市场启动之初,微信自然也提供了刷脸支付的功能,今天要整理的笔记 服务商微信付款码支付

第一步

完成微信商户号的注册流程

【商户号注册请打开微信支付https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F】

【付款码支付请打开微信支付https://pay.weixin.qq.com/static/product/product_intro.shtml?name=qrcode】

第二步

服务商微信PHP-SDK

【PHP-SDK下载链接 https://pay.weixin.qq.com/wiki/doc/api/external/micropay_sl.php?chapter=5_1】

第三步

采用证书模式开发【接口文档https://pay.weixin.qq.com/wiki/doc/api/external/micropay_sl.php?chapter=9_10&index=1】

SDK目录说明文件

PHP-SDK实现微信付款码支付_第1张图片

wx.php 文件内部源码说明

#基础设置
header('content-type:application/json;charset=utf-8');
require_once "./lib/WxPay.Api.php";

#配置属性
class Config extends WxPayConfigInterface
{

    const APPID     = 'xxxxxxxxxxx'; #应用的APPID
    const MCHID     = 'xxxxxxxxxxx'; #应用的开户邮件中的商户号
    const KEY       = 'xxxxxxxxxxx'; #这里请使用商户平台登录账户和密码登录http://pay.weixin.qq.com 平台设置的“API密钥”,为了安全,请设置为32字符串
    const APPSECRET = 'xxxxxxxxxxx'; #改参数在JSAPI支付(open平台账户不能进行JSAPI支付)的时候需要用来获取用户openid,可使用APPID对应的公众平台登录http://mp.weixin.qq.com 的开发者中心获取AppSecret。
    const SIGNYYPE  = 'HMAC-SHA256'; #签名类型,默认为MD5,支持HMAC-SHA256和MD5。
    const NOTIFYURL = ''; #异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
    const TRADETYPE = 'MICROPAY'; # MICROPAY--付款码支付,付款码支付有单独的支付接口,所以接口不需要上传,该字段在对账单中会出现

    public function GetAppId(){
        return self::APPID;
    }
    public function GetMerchantId(){
        return self::MCHID;
    }
    public function GetNotifyUrl(){
        return self::NOTIFYURL;
    }
    public function GetSignType(){
        return self::SIGNYYPE;
    }
    public function GetProxy(&$proxyHost, &$proxyPort){
        $proxyHost = "0.0.0.0";
        $proxyPort = 0;
    }
    public function GetReportLevenl(){
        return 1;
    }
    public function GetKey(){
        return self::KEY;
    }
    public function GetAppSecret(){
        return self::APPSECRET;
    }
    public function GetSSLCertPath(&$sslCertPath, &$sslKeyPath){
        $sslCertPath = './cert/apiclient_cert.pem';
        $sslKeyPath = './cert/apiclient_key.pem';
    }
}

$params = $_REQUEST;
$auth_code = $params['auth_code'];#付款码
$total_fee = $params['total_fee'];#支付金额
#验证传递的参数
if(!isset($auth_code) || !preg_match("/^[0-9]{6,64}$/i", $auth_code, $matches))
{
    header('HTTP/1.1 404 Not Found');
    exit();
}
if(!isset($total_fee) || !is_number($total_fee) || $total_fee <= 0)
{
    header('HTTP/1.1 404 Not Found');
    exit();
}

#执行支付
try {
    $pay = new WxPayApi();
    $input = new WxPayMicroPay();
    $input->SetAuth_code($auth_code);
    $input->SetBody("亲情支付-支付");
    $input->SetTotal_fee($total_fee);
    $input->SetSubMch_id('xxxxxxxx');#子商户号
    $input->SetNonce_str(uniqid());
    $input->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);
    $input->SetOut_trade_no("sdkphp".date("YmdHis"));
    $result = $pay::micropay((new Config()),$input);
    echo json_encode($result);
} catch(Exception $e) {
    header('HTTP/1.1 404 Not Found');
}

注意事项:

lib/WxPay.Data.php 内 WxPayMicroPay类内部需要新增一个子商户号的方法,官方的SDK默认没有。
    /**
     * 设置微信支付分配的商户号
     * @param string $value
     **/
    public function SetSubMch_id($value)
    {
        $this->values['sub_mch_id'] = $value;
    }
    /**
     * 获取微信支付分配的商户号的值
     * @return 值
     **/
    public function GetSubMch_id()
    {
        return $this->values['sub_mch_id'];
    }
    /**
     * 判断微信支付分配的商户号是否存在
     * @return true 或 false
     **/
    public function IsSubMch_idSet()
    {
        return array_key_exists('sub_mch_id', $this->values);
    }

子商户号作为微信支付返佣的接收对象。

 

特别说明:

微信和支付的付款码区别在于前两位数字

微信 以 10、11、12、13、14、15开头的数字,长度18位

支付宝 以 25、26、27、28、29、30开头的数字,长度16-24位

 

 

 

你可能感兴趣的:(微信支付)