private function getPayJsParameter(Order $model, $title, $attach = '') { $wechatUser = $this->getWechatUser(); $account = WechatAccount::findOrFail($this->wechat_oauth2_account); $api = new API($account->toArray(), $account->getKey()); $pay = new Pay($api); $order = (new UnifiedOrder('JSAPI', date('ymdHis') . str_pad($model->getKey(), 8, '0', STR_PAD_LEFT), $title, $model->total_money * 100))->SetNotify_url(url('wechat/feedback/' . $account->getKey() . '/' . $model->getKey()))->SetOpenid($wechatUser->openid)->setDetail($model->title)->SetAttach($attach); $UnifiedOrderResult = $pay->unifiedOrder($order); if ($UnifiedOrderResult['return_code'] != 'SUCCESS' || empty($UnifiedOrderResult['prepay_id'])) { return $this->failure(['content' => $UnifiedOrderResult['return_msg']]); } $js = new Js($api); $result = $js->getPayParameters($UnifiedOrderResult); return $result; }
/** * 支付回调 * @return [type] [description] */ public function feedback(Request $request, $aid, $oid = NULL) { $aid = $request->input('aid') ?: $aid; $oid = $request->input('oid') ?: $oid; $account = WechatAccount::findOrFail($aid); $api = new API($account->toArray(), $account->getKey()); $pay = new WechatPayTool($api); $result = $pay->notify(function ($result, &$message) use($account, $oid) { if ($result['return_code'] == 'SUCCESS') { $wechatUser = WechatUser::where('openid', $result['openid'])->firstOrFail(); $result = array_only($result, ['return_code', 'return_msg', 'mch_id', 'device_info', 'result_code', 'err_code', 'err_code_des', 'trade_type', 'bank_type', 'total_fee', 'fee_type', 'cash_fee', 'cash_fee_type', 'coupon_fee', 'coupon_count', 'transaction_id', 'out_trade_no', 'attach', 'time_end']); WechatBill::create($result + ['waid' => $account->getKey(), 'wuid' => $wechatUser->getKey()]); if (!empty($oid)) { //因为是微信访问的,只能靠记录日志来查询是否失败 $order = Order::findOrFail($oid); $order->pay($result['total_fee']); $this->dispatch((new \App\Jobs\OrderDeal($order))->delay(config('site.order.deal', 14 * 86400))); } } else { WechatBill::create(['return_code' => $result['return_code'], 'return_msg' => $result['return_msg'], 'waid' => $account->getKey()]); } return true; }); return $result; }
/** * 支付回调 * @return [type] [description] */ public function feedback(Request $request, $aid, $oid = NULL) { $aid = $request->input('aid') ?: $aid; $oid = $request->input('oid') ?: $oid; $account = WechatAccount::findOrFail($aid); $api = new API($account->toArray(), $account->getKey()); $pay = new WechatPayTool($api); $result = $pay->notify(function ($result, &$message) use($account) { if ($result['return_code'] == 'SUCCESS') { $wechatUser = WechatUser::where('openid', $result['openid'])->firstOrFail(); $result = array_only($result, ['return_code', 'return_msg', 'mch_id', 'device_info', 'result_code', 'err_code', 'err_code_des', 'trade_type', 'bank_type', 'total_fee', 'fee_type', 'cash_fee', 'cash_fee_type', 'coupon_fee', 'coupon_count', 'transaction_id', 'out_trade_no', 'attach', 'time_end']); WechatBill::create($result + ['waid' => $account->getKey(), 'wuid' => $wechatUser->getKey()]); } else { WechatBill::create(['return_code' => $result['return_code'], 'return_msg' => $result['return_msg'], 'waid' => $account->getKey()]); } return true; }); return $result; }