小程序微信支付

小程序微信支付

支付功能

微信配置必填项

$config = [
'app_id'             => 'xxxx',
'mch_id'             => 'your-mch-id',
'key'                => 'key-for-signature',     // API 密钥

// 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
'cert_path'          => 'path/to/your/cert.pem',    // XXX: 绝对路径!!!!
'key_path'           => 'path/to/your/key',    // XXX: 绝对路径!!!!

// 默认支付结果通知地址(也可以在下单时单独设置来想覆盖它)
'notify_url'         => '默认的订单回调地址',
];

使用必要的接口进行下单

use EasyWeChat\Factory;

$app = Factory::payment($config);
$result = $app->order->unify([
    'body' => '腾讯充值中心-QQ会员充值',//描述
    'out_trade_no' => '20150806125346',//订单号
    'total_fee' => 88,//总价格
    'spbill_create_ip' => '123.12.12.123', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
    'notify_url' => 'https://pay.weixin.qq.com/wxpay/pay.action', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
    'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
    'openid' => '用户的openid',
]);

//注意:$result返回的是数组,还是对象,看版本
//返回的值有

    "return_code": "SUCCESS",
    "return_msg": "OK",
    "appid": "wx2421b1c4390ec4sb",
    "mch_id": "10000100",
    "nonce_str": "IITRi8Iabbblz1J",
    "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeSs6o",
    "sign": "7921E432F65EB8ED0CE9755F0E86D72F2",
    "result_code": "SUCCESS",
    "prepay_id": "wx201411102639507cbf6ffd8b0779950874",
    "trade_type": "JSAPI"

使用JSSDK支付

$jssdk = $app->jssdk;

$prepayId = $result['prepay_id'];
//小程序
$config = $jssdk->bridgeConfig($prepayId, false); // 返回数组

支付后的回调

使用回调前记得把配置里的回调参数改好,回调访问的地址是post方式且不需要token

回调写法

$app = Factory::payment($config);

$response = $app->handlePaidNotify(function ($message, $fail) {
    // 查询订单
    $order = Order::where('订单号字段', $message['out_trade_no'])->first();

    if (!$order || $order->paid_at) { // 如果订单不存在 或者 订单已经支付过了
        return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
    }

    ///////////// <- 建议在这里调用微信的【订单查询】接口查一下该笔订单的情况,确认是已经支付 /////////////

    if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
        // 用户是否支付成功
        if (array_get($message, 'result_code') === 'SUCCESS') {
            //对订单的修改
        } elseif (array_get($message, 'result_code') === 'FAIL') {
            // 用户支付失败
        }
    } else {
        return $fail('通信失败');
    }

    return true; // 返回处理完成
});
$response->send();

444 total views, 8 views today

Revisions

No comments yet.

发表评论