php实现微信公众号支付

由 emer 发布

废话不多,直接上代码:
1.config.php

<?php

/**
 * 微信支付商户信息配置文件
 * APIv3版本
 */
$wechatpay_config = [
        /**
         * 绑定支付的APPID
         */
        'appid' => '***********',

        /**
         * 商户号
         */
        'mchid' => '**********',

        /**
         * 商户APIv3密钥
         */
        'apikey' => '**********',

        /**
         * 公众帐号secert(仅JSAPI支付需要配置)
         *
         * 获取说明:https://kf.qq.com/faq/181105JJNbmm181105eUZfee.html
         */
        'appsecret' => '**********',

        /**
         * 「商户API私钥」文件路径
         */
        'merchantPrivateKeyFilePath' => 'protected/cert/apiclient_key.pem',

        /**
         * 「商户API证书」的「证书序列号」
         */
        'merchantCertificateSerial' => '**********',

        /**
         * 「微信支付平台证书」文件路径
         *  这个证书不需要上传,只需设置好路径,会自动下载并保存
         */
        'platformCertificateFilePath' => 'protected/cert/cert.pem',

        /**
         * 商户证书路径(仅退款、撤销订单时需要)
         */
        'sslcert_path' => 'protected/cert/apiclient_cert.pem',

        /**
         * 商户证书私钥路径(仅退款、撤销订单时需要)
         */
        'sslkey_path' => 'protected/cert/apiclient_key.pem',

        /**
         * 子商户号
         * 服务商模式子商户需要填写
         */
        //'sub_mchid' => '',

        /**
         * 子商户APPID(可留空)
         */
        //'sub_appid' => '',

        /**
         * 是否电商收付通
         * 服务商模式可配置,需同时填写子商户号
         */
        //'ecommerce' => false,

];
return $wechatpay_config;

2.jspay.php

<?php
/**
 * 微信支付JSAPI支付示例
 */

require __DIR__ . '/../vendor/autoload.php';
@header('Content-Type: text/html; charset=UTF-8');
$hostInfo = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];

//引入配置文件
$wechatpay_config = require('config.php');

//①、获取用户openid
try{
    $tools = new \WeChatPay\JsApiTool($wechatpay_config['appid'], $wechatpay_config['appsecret']);
    $openid = $tools->GetOpenid();
}catch(Exception $e){
    echo $e->getMessage();
    exit;
}

//②、统一下单
$params = [
    'body' => 'sample body', //商品名称
    'out_trade_no' => date("YmdHis").rand(111,999), //商户订单号
    'total_fee' => '150', //支付金额,单位:分
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], //支付用户IP
    'notify_url' => $hostInfo.dirname($_SERVER['SCRIPT_NAME']).'/notify.php', //异步回调地址
    'openid' => $openid,
];

//发起支付请求
try {
    $client = new \WeChatPay\PaymentService($wechatpay_config);
    $result = $client->jsapiPay($params);
    $jsApiParameters = json_encode($result);
} catch (Exception $e) {
    echo '微信支付下单失败!'.$e->getMessage();
    exit;
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <link href="//cdn.staticfile.org/ionic/1.3.2/css/ionic.min.css" rel="stylesheet" />
    <title>微信支付手机版</title>
</head>
<body>
<div class="bar bar-header bar-light" align-title="center">
    <h1 class="title">微信安全支付</h1>
</div>
<div class="has-header" style="padding: 5px;position: absolute;width: 100%;">
<div class="text-center" style="color: #a09ee5;">
<i class="icon ion-information-circled" style="font-size: 80px;"></i><br>
<span>正在跳转...</span>
<script>
    document.body.addEventListener('touchmove', function (event) {
        event.preventDefault();
    },{ passive: false });
    //调用微信JS api 支付
    function jsApiCall()
    {
        WeixinJSBridge.invoke(
            'getBrandWCPayRequest',
            <?php echo $jsApiParameters; ?>,
            function(res){
                if(res.err_msg == "get_brand_wcpay_request:ok" ) {
                    alert('支付成功')
                }
                //WeixinJSBridge.log(res.err_msg);
                //alert(res.err_code+res.err_desc+res.err_msg);
            }
        );
    }

    function callpay()
    {
        if (typeof WeixinJSBridge == "undefined"){
            if( document.addEventListener ){
                document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
            }else if (document.attachEvent){
                document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
                document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
            }
        }else{
            jsApiCall();
        }
    }
    window.onload = callpay();
</script>
</div>
</div>
</body>
</html>

3.需要的SDK去这里下载:微信支付第三方 PHP SDK


0条评论

发表评论


验证码