Laravel5.5+EasyWeChat_小程序支付(含回调)

 一、支付准备

1. 登录微信公众平台,到小程序后台获取小程序应用信息:APP_ID(应用ID)、APP_SECRET(应用秘钥)

2. 登录微信商户平台,获取商户信息:MCH_ID(商户ID)、MCH_KEY(商户公钥)

3. 在商户平台配置中设置回调网址授权。

二、小程序调用支付代码

use Config;
use EasyWeChat\Factory;

public function pay()
{
    $options = [
        'app_id' => Config.get(pay.app_id),
        'mch_id' => Config.get(pay.mch_id),
        'key' => Config.get(pay.mch_key),
        'notify_url' => 'https://example.com/notify'
    ];

    $payment = Factory::payment($options);
    $jssdk = $payment->jssdk;

    $attributes = [
        'trade_type' => 'JSAPI',              // 支付方式,小程序支付使用JSAPI
        'body' => '这是一个测试订单',            // 订单说明
        'out_trade_no' => 'wyevcweu2178cec',  // 自定义订单号
        'total_fee' => 1 * 100,               // 单位:分
        'openid' => $openid                   // 当前用户的openId
    ];

    $result = $payment->order->unify($attributes);

    if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
        $prepayId = $result['prepay_id'];
        $config = $jssdk->sdkConfig($prepayId);
        return response($config);
    }

    if ($result['return_code'] == 'FAIL' && array_key_exists('return_msg', $result)) {
        return $this->responseError(-1, $result['return_msg']);
    }

    return $this->responseError(-1, $result['err_code_des']);
}

三、回调方法

    public function notify(Request $request)
    {
        $notify = $this->getNotify();

        $options = [
            'app_id' => $notify->appid,
            'mch_id' => Config.get(pay.mch_id),
            'key' => Config.get(pay.mch_key),
            'notify_url' => 'https://example.com/notify'
        ];

        $payment = Factory::payment($options);

        $response = $payment->handlePaidNotify(function ($message, $fail)
        {
            // 根据返回的订单号查询订单数据
            $order = $this->order->findBy('order_num', $message['out_trade_no']);
            
            if (!$order) {
                $fail('Order not exist.');
            }
            
            if ($order->pay_status  == '已支付') {
                return true;
            }
            
            // 支付成功后的业务逻辑
            if($message['result_code'] === 'SUCCESS')
            {
                ……

            }
            
            return true;
        });

        return $response;
    }

    private function getNotify(Request $request = null)
    {
        $request = Request::createFromGlobals();
    
        try {
            $xml = XML::parse(strval($request->getContent()));
        } catch (\Throwable $e) {
            throw new Exception('Invalid request XML: ' . $e->getMessage(), 400);
        }
    
        if (!is_array($xml) || empty($xml)) {
            throw new Exception('Invalid request XML.', 400);
        }

        return new Collection($xml);
    }

 :回调返回的XML值 

/*
 *    小程序支付回调参数
 */

{
	xml: {
		"appid": "小程序序应用id",
		"bank_type": "CFT",
		"cash_fee": "1",
		"fee_type": "CNY",
		"is_subscribe": "N",
		"mch_id": "微信商户应用id",
		"nonce_str": "5b8d273d5f7d9",
		"openid": "oEncxK5efj-NDZHlFB1uHDbc02Oxo",
		"out_trade_no": "db76c530af7311e8b58200163e0ee306",
		"result_code": "SUCCESS",
		"return_code": "SUCCESS",
		"sign": "4BEE4F02914454E692FEAF95859EA642",
		"time_end": "20180903202121",
		"total_fee": "1",
		"trade_type": "JSAPI",
		"transaction_id": "4200000172201809034664407865"
	}
}

猜你喜欢

转载自blog.csdn.net/createNo_1/article/details/82377998