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;
}
}