Laravel 微信 Pay

sea-robbers發表於2019-07-14

Laravel-pay

都沒使用過Markdown,這裡就不要提示文章![Laravel](https://cdn.learnku.com/uploads/images/201907/13/21839/5jb7SbJdHy.png!large)

**微信支付

  • 掃碼支付
  • H5支付
  • jsapi支付
1、掃碼支付
 /**
     * 微信掃碼支付接
     *
     * @return mixed
     */
    public function weixinScanPay()
    {

        $order = [
            'out_trade_no' => time(), // 只能是數字、大小寫字母_-|* 且在同一個商戶號下唯一 要求32字元
            'body'         => '訂單支付',
            'total_fee'    => '1',  // 訂單總金額,單位為分,詳見支付金額
        ];

        try {

            $pay = Pay::wechat(config('pay.wechat'))->scan($order);

            $res = (new BaconQrCodeGenerator)
                ->format('svg')
                ->size(200)->errorCorrection("L")
                ->generate($pay['code_url']);
            return $res;
        } catch (GatewayException $e) {

            Log::info('二維碼出錯:' . $e->getMessage());
        }

    }
3、H5支付
/**
     * 微信H5支付訂單下單處理
     *
     * @param Request $request
     * @return string
     */
    public function H5Pay()
    {

        // 測試 訂單號
        $order_no = time();
       $amount = '1';

        $order = [
            'out_trade_no' => $order_no, // 只能是數字、大小寫字母_-|* 且在同一個商戶號下唯一 要求32字元
            'body'         => '訂單支付', // 商品描述
            'total_fee'    => $amount,  // 訂單總金額,單位為分,詳見支付金額
        ];

        try {

            $wap = Pay::wechat(config('pay.wechat'))->wap($order);

            // 回撥地址支付完成頁面
            $mweb_url = $wap->getTargetUrl() . '&redirect_url=' . config('pay.wechat.pay_success');

            $set_wap = Pay::wechat(config('pay.wechat'))->wap($order)->setTargetUrl($mweb_url);

            return $set_wap->getContent();

        } catch (GatewayException $e) {

            Log::info(date("H:i:s") . " 訂單{order['out_trade_no']}");

            if (strpos($e->getMessage(), 'OK該訂單已支付') === false) {

                // 不是已支付訂單
                return response()->error($e->getMessage());

            } else {

                return response()->error('訂單已支付訊息');

            }

        }

    }
 /**
     * 獲取 wx js api pay 資訊
     *
     * @param Api $api
     * @return mixed
     */
    public function jsApiPay()
    {

        $order_no = time();

        $order = [
         //   'openid'       => $api->user()->openid, 
            'out_trade_no' => $order_no, // 只能是數字、大小寫字母_-|* 且在同一個商戶號下唯一 要求32字元
            'body'         => '訂單支付', // 商品描述
            'total_fee'    => 1  // 訂單總金額,單位為分,詳見支付金額
        ];

        try {

            return response()->data(Pay::wechat(config('pay.wechat'))->mp($order));

        } catch (GatewayException $e) {

            Log::info(date("H:i:s") . " 訂單{order['out_trade_no']}");

            if (strpos($e->getMessage(), 'OK該訂單已支付') === false) {

                // 不是已支付訂單
                return response()->error('訂單支付失敗!');

            } else {

                return response()->error('訂單已支付訊息');

            }

        }

    }

相關文章