request->param(); $rule = [ 'return_url'=>'require', 'out_trade_no'=>'require', 'total_amount'=>'require', 'discountable_amount'=>'require', 'subject'=>'require', //'body'=>'require', //goods_id,goods_name,quantity,price,goods_category,body,show_url 'goods_detail'=>'isset', 'store_id'=>'isset', 'terminal_id'=>'isset', 'extend_params'=>'isset', 'company_code'=>'require' ]; $validate = new Validate($rule); if(!$validate->check($params)){ HelperService::returnJson(['code'=>400,'msg'=>$validate->getError()]); } Log::record($params); $companyCode = $params['company_code']; unset($params['company_code']); if(!file_exists("./$companyCode/alipay/app_private_key.pem")){ $this->error('很抱歉,暂不支持支付宝平台'); } $body = ""; $goods_detail = isset($params['goods_detail'])?json_decode($params['goods_detail'],true):''; // if(!empty($goods_detail)){ // $body .= '消费详情:'; // foreach($goods_detail as $key=>$item){ // $list_no = $key+1; // $body .= " ({$list_no})、{$item['goods_name']}x{$item['quantity']}份 = {$item['price']}元;"; // } // } // try { //$out_trade_no_arr = explode('_',"{$params['out_trade_no']}"); $order_no = @reset(explode('_',"{$params['out_trade_no']}")); //判断改公司是否存在 $companySmsJson = $this->_companyExist($companyCode); if ($companySmsJson === false) { die(""); } //判断订单号是否已经支付过 $AliPayRecordModel = new AliPayRecordModel(); $AliPayRecord = $AliPayRecordModel->where(['order_no' => "{$order_no}", 'company_code' => "{$companyCode}"])->find(); if (!empty($AliPayRecord)) { die(""); } Log::record('ALIPAY-SQL'.$AliPayRecordModel->getLastSql()); $submitForm = Wappay::pay(array_filter([ 'out_trade_no' => $params['out_trade_no'], 'subject' => "{$params['subject']}",//售卖项目(Iphone6 16G) 'total_amount' => $params['total_amount'], 'discountable_amount' => $params['discountable_amount'], 'body' => $body, //'goods_detail'=>$goods_detail, 'auth_token' => isset($companySmsJson['app_auth_token'])?$companySmsJson['app_auth_token']:"", 'extend_params'=>isset($companySmsJson['sys_service_provider_id'])?['sys_service_provider_id'=>$companySmsJson['sys_service_provider_id']]:[], 'seller_id' => isset($companySmsJson['ali_seller_id'])?$companySmsJson['ali_seller_id']:"", 'operator_id' => isset($params['operator_id']) ? $params['operator_id'] : 'ky_vapi', 'terminal_id' => $params['terminal_id'], 'timeout_express' => '1m' ]), [ 'gatewayUrl' => 'https://openapi.alipay.com/gateway.do', //'app_id' => $params['app_id'], 'app_id' => $companySmsJson['app_id'], 'merchant_private_key' => file_get_contents("./$companyCode/alipay/app_private_key.pem"), 'alipay_public_key' => file_get_contents("./$companyCode/alipay/app_public_key.pem"), 'sign_type' => isset($companySmsJson['sign_type'])?$companySmsJson['sign_type']:'RSA2', 'format' => 'JSON', 'return_url' => $params['return_url'], 'notify_url' => 'http://' . $_SERVER['SERVER_NAME'] . '/index/Alipay/notifyPlatformAlipay', ]); Log::record("$submitForm"); $this->assign('submitForm', $submitForm); // }catch (\Exception $ex){ // die(""); // } return $this->fetch('alipay/pay'); } private function _companyExist($companyCode){ $AuthCompanyModel = new AuthCompanyModel(); $companyInfo = $AuthCompanyModel->getInfo(['company_code'=>$companyCode]); if(empty($companyInfo) || empty($companyInfo['sms_json'])){ return false; } return json_decode($companyInfo['sms_json'],true); } public function notifyPlatformAlipay(){ $params = $this->request->param(); try { $AliPayRecordModel = new AliPayRecordModel(); $res = $AliPayRecordModel->where(['out_trade_no'=>"{$params['out_trade_no']}"])->find(); if(!empty($res)){ die('success'); } $out_trade_no_arr = explode('_', "{$params['out_trade_no']}"); $order_no = current($out_trade_no_arr); $companyCode = end($out_trade_no_arr); $data = [ 'order_no' => "{$order_no}", 'total_fee' => "{$params['total_amount']}", 'out_trade_no' => "{$params['out_trade_no']}", 'add_ts' => time(), 'alipay_msg' => json_encode($params), 'trade_no' => "{$params['trade_no']}", 'company_code' => $companyCode, ]; try{ $AliPayRecordModel->save($data); } catch (\Exception $ex){ Log::record('重复插入记录'.$ex->getMessage()); die('success'); } $companyInfo = $this->_validCompanyCode($companyCode); if ($companyInfo === false) { Log::record('notifyPlatformAlipay:公司信息不存在'); die('fail(company dont have)'); } $smsJson = json_decode($companyInfo['sms_json'], true); if (isset($smsJson['alipay_url'])) { $url = $smsJson['alipay_url']; $url = strpos($url,'?')>0?$url."&":$url."?"; $url = $url."order_no=$order_no&out_trade_no={$params['out_trade_no']}&total_amount={$params['total_amount']}"; HelperService::httpPost("{$url}", json_encode($data)); Log::record('notifyPlatformAlipay:success'); die('success'); } Log::record('notifyPlatformAlipay:alipay_url dont have'); die('fail(alipay_url dont have)'); }catch (\Exception $ex){ $datetime = date('Y-m-d H:i:s'); Log::record("[$datetime]notifyPlatformAlipay:".$ex->getMessage()); } } private function _validCompanyCode($companyCode){ $AuthCompanyModel = new AuthCompanyModel(); $company = $AuthCompanyModel->getInfo(['company_code'=>"$companyCode"]); if(empty($company)){ return false; } return $company; } }