laravel 微信EasyWechat掃碼支付
阿新 • • 發佈:2019-01-08
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; }