1. 程式人生 > >laravel 微信EasyWechat掃碼支付

laravel 微信EasyWechat掃碼支付

        protected function options(){ 




        //選項設定  
   		return  $options = [
		    // 前面的appid什麼的也得保留哦
		    'app_id' => 'wx70****b87ab14',
		   	'secret'=>'5136bc10d******4c5c3f4',
		    'token'   => 'your-token',          // Token
	
            'aes_key' => '',                    // EncodingAESKey,安全模式下請一定要填寫!!!             // ...     // payment     'payment' => [         'merchant_id'     
=> '1******991', 'key'                => '28d9d6b641******e31abeb', 'cert_path'          => '*********/apiclient_cert.pem', // XXX: 絕對路徑!!!! 'key_path'           => '********apiclient_key.pem',      // XXX: 絕對路徑!!!!
'notify_url'         => 'http://***************',       //          ], ];     } //掃碼支付生成訂單 public function payOrder(){ // 通過EasyWechat來呼叫 $config = $this->options(); $wxApp = new Application($config); $payment = $wxApp->payment; $attributes = [ 'trade_type'=>Order::NATIVE, 'body'=>"商品描述", 'detail'=>"商品簡介", 'out_trade_no'=>'sdfdsfdsgdsadadsafdadsa', 'total_fee'=>'1', 'notify_url'=>'http://pay.codeisland.cn/wx/pay/notify' ]; $o = new Order($attributes); $result = $payment->prepare($o); if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){ $prepayId = $result->prepay_id; $codeUrl = $result->code_url;    $qrCode = new QrCode($codeUrl);    //生成二維碼 $qrCode->setSize(300); $qrCode->setWriterByName('png'); $qrCode->setMargin(10); $qrCode->setEncoding('UTF-8'); $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH); $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]); $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]); // $qrCode->setLabel('Scan the code', 16, __DIR__.'/../assets/fonts/noto_sans.otf', LabelAlignment::CENTER); //$qrCode->setLogoPath(__DIR__.'/../assets/images/symfony.png');     //logo 區 $qrCode->setLogoWidth(150); $qrCode->setRoundBlockSize(true); $qrCode->setValidateResult(false); //Directly output the QR code // header('Content-Type: '.$qrCode->getContentType()); // echo $qrCode->writeString(); // die; // // Save it to a file // $qrCode->writeFile(__DIR__.'/qrcode.png'); $imgData= base64_encode($qrCode->writeString());     //轉成字串返回給前端 $data=['status_code'=>200,'msg'=>'發起支付成功','imgData'=>$imgData]; return $this->responseSuccess($data,'request_success'); }else{ return $this->setStatusCode(1001)->responseErrors('生成訂單錯誤!'); } }
	public function paysuccess(Request $request)
			{  
				
				$app = new Application($this->options());
				        $payment = $app->payment;
				        $response = $app->payment->handleNotify(function($notify, $successful)
				        {




				            \Log::info('訂單號:'.$notify->transaction_id);
				            \Log::info('ooooo:'.json_encode($notify));
				           $res = DB::table('out_order_wxpay_notify')->insert($notify);
				            return $res;
				            exit;


				            // 使用通知裡的 "微信支付訂單號" 或者 "商戶訂單號" 去自己的資料庫找到訂單
				            $order = 查詢訂單($notify->transaction_id);
				            if (!$order) { // 如果訂單不存在
				                return 'Order not exist.'; // 告訴微信,我已經處理完了,訂單沒找到,別再通知我了
				            }
				            // 如果訂單存在
				            // 檢查訂單是否已經更新過支付狀態
				            if ($order->paid_at) { // 假設訂單欄位“支付時間”不為空代表已經支付
				                return true; // 已經支付成功了就不再更新了
				            }
				            // 使用者是否支付成功
				            if ($successful) {
				                // 不是已經支付狀態則修改為已經支付狀態
				                $order->paid_at = time(); // 更新支付時間為當前時間
				                $order->status = 'paid';
				            } else { // 使用者支付失敗
				                $order->status = 'paid_fail';
				            }
				            $order->save(); // 儲存訂單
				            return true; // 返回處理完成
				        });
				        return $response;
				}