post('app_sources', ''); $orderType = $request->post('order_type'); if (empty($orderType)) { return api_error_return('参数错误'); } $channelList = PayConfigService::make()->getChannelList($orderType, $paySource); return api_succ_return(['msg' => '成功', 'data' => ['setting' => array_values($channelList)]]); } /** * 生成支付订单 * @param Request $request * @return \think\Response */ public function paymentInfo(Request $request) { $post = $request->post(); $curandroid = env('app.CUR_ANDROID_VERSION', ''); $curios = env('app.CUR_IOS_VERSION', '');; $curAndroidVersion = str_replace('.', '', $curandroid); $curAndroidVersion = dispRepair($curAndroidVersion, 4, '0', '0'); $curIosVersion = str_replace('.', '', $curios); $curIosVersion = dispRepair($curIosVersion, 4, '0', '0'); $app_sources = $request->param('app_sources'); $app_version = $request->param('app_version'); $app_version = str_replace('.', '', $app_version); $app_version = dispRepair($app_version, 4, '0', '0'); if ($app_sources == 'ios') { if ($curIosVersion > $app_version) { return api_error_return('app版本号过低,请更新'); } } if ($app_sources == 'android') { if ($curAndroidVersion > $app_version) { return api_error_return('app版本号过低,请更新'); } } if (empty($app_sources) || empty($app_version)) { if ($curAndroidVersion > $app_version) { return api_error_return('app版本号过低,请更新'); } } // 限制提交调起 $channel = $request->data['channel']; // 支付方式 1 支付宝支付 2 微信支付 3 余额 4 线下 $orderSn = $request->data['order_id']; $orderType = isset($post['order_type']) ? intval($post['order_type']) : 0; $cacheKeyLock = "caches:payment:locks:u{$request->uid}_t{$orderType}_{$channel}"; if (RedisCache::get($cacheKeyLock)) { return api_error_return('您的操作过于频繁,请5秒钟后重试'); } // 加锁 $result = false; RedisCache::setnx($cacheKeyLock, 1, rand(2, 3)); try { // 服务商订单验证 if ($orderType == 6) { $userInfo = UserModel::where(['id' => $request->uid])->field('id,store_type')->findOrEmpty(); $storeType = isset($userInfo['store_type']) ? $userInfo['store_type'] : 0; if ($storeType == 1) { throw new Exception('已是服务商,无需再次开通'); } } $channelList = PayConfigService::make()->getChannelList($orderType, $app_sources); if(empty($channelList)){ throw new Exception('支付渠道暂未开放,请先配置'); } $channels = $channelList? array_keys($channelList) : [15, 22, 66]; if (!in_array($channel, $channels)) { throw new Exception('支付类型错误或未开放'); } $orderType = isset($post['order_type'])? intval($post['order_type']) : 0; if(!in_array($orderType, [4,6])){ throw new Exception('订单类型参数错误'); } if ($orderType == 4) { if (empty($post['order_id'])) { throw new Exception('参数错误'); } // 验证订单是否已支付 if (PaymentService::make()->checkPaymentState($request->uid, $orderSn)) { throw new Exception('订单或已支付'); } // 订单状态验证 if (!ShopOrderModel::where(['order_sn' => $post['order_id'], 'status' => 0])->value('order_id')) { throw new Exception('订单不存在或已支付'); } // 两小时内同一个订单调起未支付数量限制 $limitPayCount = SystemConfigService::make()->getConfigByName('trade_call_pay_limit', 1, 'tradeconfig'); $limitPayCount = $limitPayCount ? $limitPayCount : env('PAYMENT.UNPAY_LIMIT_NUM', 5); $count = PaymentService::make()->getPaymentCountByState($request->uid, $orderSn, 4, 7, 2); if ($count >= $limitPayCount) { throw new Exception("2小时内该笔订单请求支付已超过{$limitPayCount}次,请稍后再试"); } } // 支付通道处理 switch ($channel) { case 1: // 微信支付 $result = WxPayServices::instance()->userId($request->uid)->data($request->data)->getUnifiedOrder(); break; case 2: // 支付宝支付 $result = AliPayServices::instance()->uid($request->uid)->data($request->data)->getUnifiedOrder(); break; case 3: // 余额支付 getActionSecury($request->uid, $request->post('security_pass', '')); if(PaymentService::make()->AccountPayBack($request->uid, $request->post('order_id', ''), 3)){ $result = api_succ_return(['msg' => '余额支付调用成功', 'data' => ['type'=> 'account']]); } break; case 5: // 积分支付 getActionSecury($request->uid, $request->post('security_pass', '')); if(PaymentService::make()->AccountPayBack($request->uid, $request->post('order_id', ''), 5)){ $result = api_succ_return(['msg' => '积分支付调用成功', 'data' => ['type'=> 'account']]); } break; case 6: // 绿色积分支付 getActionSecury($request->uid, $request->post('security_pass', '')); if(PaymentService::make()->AccountPayBack($request->uid, $request->post('order_id', ''), 6)){ $result = api_succ_return(['msg' => '绿色积分支付调用成功', 'data' => ['type'=> 'account']]); } break; case 14: // 第三方支付 汇付支付支付 { $pay = new ThirdPayServices(); $result = $pay->getHfPayInfoHF($request->uid, $request->data); } break; case 15: // 第三方支付 石区长 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoSQZ($request->uid, $request->data); } break; case 16: // 第三方支付 支付宝 石区长 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoSQZAlipay($request->uid, $request->data); } break; case 17: // 第三方支付 微信 石区长 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoSQZWechat($request->uid, $request->data); } break; case 18: // 第三方支付 银联快捷 石区长 首信易 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoSQZBankkuai($request->uid, $request->data); } break; case 19: // 第三方支付 usdt充值 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoUsdt($request->uid, $request->data); } break; case 20: // 直连银盛 无卡快捷 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoYSwk($request->uid, $request->data); } break; case 22: // 支付宝 电科科技支付 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoDiankeZfb($request->uid, $request->data); } break; case 56: // 第三方支付 易票联统一支付 { $pay = new ThirdPayServices(); $result = $pay->getYsfPayInfoTY($request->uid, $request->data); } break; case 66: // 电科云闪付 { $pay = new ThirdPayServices(); $result = $pay->getPayInfoDiankeYsf($request->uid, $request->data); } break; } } catch (Exception $e) { RedisCache::clear($cacheKeyLock); RedisCache::set("caches:payment:dkysf:otn_{$orderSn}:fail", ['msg'=>$e->getMessage(),'trace'=>$e->getTrace()], 7200); return api_error_return($e->getMessage()); } RedisCache::keyDel("caches:paymentCall:u{$request->uid}_ot{$orderType}*"); return $result? $result : api_error_return('支付请求错误或未开放,请联系客服'); } /** * 石学长 银联支付 * @param Request $request * @return \think\Response */ public function sylSurePay(Request $request) { Db::startTrans(); try { $third_pay = new ThirdPayServices(); $third_pay->sylSurePay($request->uid, $request->post()); Db::commit(); } catch (\Exception $e) { Db::rollback(); return api_error_return($e->getMessage()); } return api_succ_return('支付订单提交成功,稍后请关注订单列表'); } /** * 银盛快捷确认支付 * @param Request $request * @return \think\Response */ public function zlysSurePay(Request $request) { $post = $request->post(); if (empty($post['trade_no']) || empty($post['sms_code'])) { return api_error_return('参数错误'); } Db::startTrans(); try { $ser = new ThirdPayServices(); $res = $ser->kjPayWithCode($post['trade_no'], $post['sms_code']); Db::commit(); } catch (\Exception $e) { Db::rollback(); return api_error_return($e->getMessage()); } return $res; } /** * 直连银盛 支持的银行卡列表 * @param Request $request * @return \think\Response * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function zlysBankList(Request $request) { try { $post = $request->post(); $pageSize = isset($post['limit']) ? $post['limit'] : 0; return api_succ_return(['msg' => '成功', 'data' => YsBankService::make()->getList($post, $pageSize)]); } catch (\Exception $exception) { return api_error_return('获取错误:' . $exception->getMessage()); } } /** * 银盛银行卡支付支持的银行通道 * @param Request $request * @return \think\Response */ public function zlysBankPayWay(Request $request) { return api_succ_return(['msg' => '成功', 'data' => [ ['bank_name' => '工商银行', 'xiane' => '单笔1万、单日1万、单月5万', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '中国银行', 'xiane' => '单笔5万,单日5万', 'jieji' => '否', 'xinyong' => '是'], ['bank_name' => '建设银行', 'xiane' => '单笔1万、单日1万、单月5万', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '招商银行', 'xiane' => '单笔5万,单日5万', 'jieji' => '否', 'xinyong' => '是'], ['bank_name' => '光大银行', 'xiane' => '单笔0.5万、单日5万 ', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '民生银行', 'xiane' => '2万/2万', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '浦发银行', 'xiane' => '借单笔/日2万、贷单笔/日1万、月不限', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '平安银行', 'xiane' => '单笔5万、单日5万、月不限', 'jieji' => '是', 'xinyong' => '否'], ['bank_name' => '广发银行', 'xiane' => '贷记卡(单笔3w,单日3w)、借记卡(单笔2w,单日2w)', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '中信银行', 'xiane' => '单笔5万、日/月不限', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '交通银行', 'xiane' => '单笔2万,单日2万,单月5万', 'jieji' => '否', 'xinyong' => '是'], ['bank_name' => '渤海银行', 'xiane' => '借单笔3w,单日3w;贷单笔2w,单日2w', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '上海银行', 'xiane' => '借单笔1w单日1万;贷单笔2w,日不限', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '华夏银行', 'xiane' => '日累计2万,月累计60万', 'jieji' => '是', 'xinyong' => '否'], ['bank_name' => '邮储银行', 'xiane' => '借记卡:无限额,以发卡测为准;贷记卡:单笔2万、单日2万', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '浙商银行', 'xiane' => '单笔2万、单日2万', 'jieji' => '是', 'xinyong' => '是'], ['bank_name' => '区域银行', 'xiane' => '无', 'jieji' => '是', 'xinyong' => '是']] ]); } /** * 用户绑定银行卡 * @param Request $request * @return \think\Response */ public function userToSignBank(Request $request) { Db::startTrans(); try { $third_pay = new ThirdPayServices(); $sign_url = $third_pay->userBankSign($request->uid, $request->post()); Db::commit(); } catch (\Exception $e) { Db::rollback(); return api_error_return($e->getMessage()); } return api_succ_return(['msg' => '成功', 'data' => ['sign_url' => $sign_url]]); } /** * 用户解绑银行卡 * @param Request $request * @return \think\Response */ public function userToUnSignBank(Request $request) { Db::startTrans(); try { $third_pay = new ThirdPayServices(); $third_pay->userUnBankSign($request->uid, $request->post()); Db::commit(); } catch (\Exception $e) { Db::rollback(); return api_error_return($e->getMessage()); } return api_succ_return('成功'); } /** * 用户绑定银行卡签名 * @param Request $request * @return \think\Response * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function myBankSignList(Request $request) { $list = Db::name('user_bank_sign')->where('uid', $request->uid) ->where('status', 2) ->field('id,name,bank_card,phone') ->withAttr('bank_card', function ($val, $data) { $len = strlen($val); return substr($val, 0, 4) . '****' . substr($val, $len - 5, $len - 1); })->select()->toArray(); return api_succ_return(['msg' => '成功', 'data' => $list]); } /** * 支持的银行卡 * @param Request $request * @return \think\Response */ public function ylBindCanSignList(Request $request) { return api_succ_return(['msg' => '成功', 'data' => [ 'chuxuka' => ['中国银行', '建设银行', '工商银行', '浦发银行', '光大银行', '华夏银行', '民生银行', '平安银行', '上海银行', '交通银行', '邮政储蓄银行', '中信银行', '浙商银行', '广东省农村信用社', '山西省农村信用社', '内蒙古自治区农村信用社', '吉林农村信用社', '河南省农村信用社', '黄河农村商业银行', '深圳农村商业银行', '天津滨海农村商业银行股份有限公司', '大连农村商业银行', '鄞州银行', '天津农商银行', '辽宁省农村信用社', '湖北农信', '云南省农村信用社联合社', '陕西省农村信用社', '青海省农村信用社联合社', '湖南省农村信用社', '黑龙江省农村信用社', '广西农村信用社', '苏州银行', '四川省农村信用社', '甘肃省农村信用社', '山东省农村信用社联合社', '广西北部湾银行', '抚顺银行股份有限公司', '辽阳银行股份有限公司', '贵州银行', '晋中银行股份有限公司', '西藏银行股份有限公司', '新疆汇和银行股份有限公司', '江苏江阴农村商业银行股份有限公司', '大连银行', '阜新银行', '吉林银行', '宁夏银行', '嘉兴银行', '常熟农商银行', '江苏江南农村商业银行股份公司', '江苏长江商行', '台州银行', '温州银行', '浙江稠州商业银行', '绍兴银行', '宁波通商银行股份有限公司', '温州民商银行', '浙江民泰商业银行', '浙江泰隆商业银行', '金华银行股份有限公司', '南洋商业银行', '贵阳银行', '韩亚银行', '宜宾商业银行', '自贡市商业银行', '顺德农村商业银行', '桂林银行股份有限公司', '承德银行', '富滇银行', '昆仑银行', '新韩银行中国', '邢台银行', '张家口市商业银行', '沧州银行', '兰州银行', '友利银行', '焦作中旅银行', '泉州银行', '厦门国际银行', '营口银行', '朝阳银行股份有限公司', '广东华兴银行', '长沙银行', '锦州银行', '九江银行', '石嘴山银行股份有限公司', '哈尔滨银行', '龙江银行', '江西银行', '攀枝花市商业银行', '重庆三峡银行', '广州银行', '晋城银行', '上饶银行', '赣州银行', '长城华西银行', '盛京银行', '甘肃银行', '中原银行', '湖北银行', '郑州银行', '富邦华一银行有限公司', '星展银行', '乐山市商业银行股份有限公司', '长治银行', '上海华瑞银行', '湖南三湘银行', '海南银行', '福建海峡银行', '北京农商银行', '河北省农村信用社', '上海农村商业银行', '江苏省农村信用社联合社', '浙江农信', '安徽省农村信用社联合社', '福建省农村信用社联合社', '江西省农村信用社', '海南省农村信用社', '重庆农村商业银行', '贵州省农村信用社', '新疆自治区农村信用社', '武汉农村商业银行', '成都农商银行', '张家港农村商业银行', '江苏紫金农村商业银行', '无锡农村商业银行', '太仓农村商业银行', '昆山农村商业银行', '广东南海农村商业银行', '浙江长兴农村商业银行'], 'xinyongka' => ['招商银行', '中国银行', '中信银行', '民生银行', '浦发银行', '平安银行', '光大银行', '广东发展银行', '上海银行', '华夏银行', '工商银行', '建设银行', '交通银行', '邮政储蓄银行', '浙商银行', '北京银行'] ]]); } /** * 绑定支付宝账号 * @param Request $request * @param UserDataModel $model * @return \think\Response */ public function bindAlipay(Request $request, UserDataModel $model) { $re_data = $request->data; if (isset($re_data['real_name']) || isset($re_data['alipay'])) { return api_error_return('参数错误--算出sign_str不要传real_name跟alipay'); } [$sign_str] = $request->getMore([ ['sign_str', ''] ], true); if (empty($sign_str)) return api_error_return('参数错误'); $data = json_decode(AESjiemi($sign_str)); if (empty($data)) return api_error_return('参数错误'); $data = object_array($data); try { return api_succ_return(['msg' => '绑定成功', 'data' => $model->bindAlipay($data, $request->uid)]); } catch (\Exception $e) { return api_error_return('绑定失败'); } } /** * 解绑支付宝 * @param Request $request * @param UserDataModel $model * @return \think\Response */ public function unbindAlipay(Request $request, UserDataModel $model) { try { return api_succ_return(['msg' => '解绑成功', 'data' => $model->unbindAlipay($request)]); } catch (\Exception $e) { return api_error_return('解绑失败'); } } /************** 支付回调处理 **************/ /** * 电科支付回调处理 * @param Request $request * @return string */ public function thirdPayZfbNewBack(Request $request) { $params = $request->param(); $service = new ThirdPayServices(); $date = date('Y-m-d H:i:s'); $outTradeNo = isset($params['orderId'])? trim($params['orderId']) : ''; $isPay = isset($params['pay'])? trim($params['pay']) : ''; $amount = isset($params['amount'])? floatval($params['amount']) : 0; $paySign = isset($params['sign'])? trim($params['sign']) : ''; // if(empty($paySign)){ // unset($params['sign']); // return $service->diankesign($params); // } // 加锁 $key = $outTradeNo? $outTradeNo : date('YmdHis'); $cacheKeyLock = "caches:payNotify:dkpay:locks:otn_{$key}"; $cacheKey = "caches:payNotify:dkpay:otn_{$key}:"; if(RedisCache::get($cacheKeyLock)){ return 'Frequent submission'; } // 回调处理 RedisCache::setnx($cacheKeyLock, 1, rand(2,3)); RedisCache::set($cacheKey.'callback', ['params'=> $params,'date'=> $date], 7200); if ($outTradeNo && $amount && $isPay == 'true') { // 校验签名 if ($paySign) { $signData = $params; unset($signData['sign']); $sign = $service->diankesign($signData); if ($sign == $paySign) { Db::startTrans(); try { PaymentService::make()->payBack($params['orderId'], $params['amount'], 22, json_encode($params)); Db::commit(); return 'success'; } catch (\Exception $e) { Db::rollback(); $error = [ 'msg'=> $e->getMessage(), 'trace'=> $e->getTrace(), ]; RedisCache::set($cacheKey.'fail', ['params'=> $params,'error'=> $error,'date'=> $date], 7200); RedisCache::clear($cacheKeyLock); } } else { RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'签名错误','date'=> $date], 7200); } }else{ RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'缺少签名参数','date'=> $date], 7200); } } return 'fail'; } /** * 电科支付回调处理 * @param Request $request * @return string */ public function thirdPayDkysfPayBack(Request $request) { $params = $request->param(); $service = new ThirdPayServices(); $date = date('Y-m-d H:i:s'); $outTradeNo = isset($params['orderId'])? trim($params['orderId']) : ''; $isPay = isset($params['pay'])? trim($params['pay']) : ''; $amount = isset($params['amount'])? floatval($params['amount']) : 0; $paySign = isset($params['sign'])? trim($params['sign']) : ''; if(empty($paySign)){ unset($params['sign']); return $service->makeSign($params); } // 加锁 $key = $outTradeNo? $outTradeNo : date('YmdHis'); $cacheKeyLock = "caches:payNotify:dkysf:locks:otn_{$key}"; $cacheKey = "caches:payNotify:dkysf:otn_{$key}:"; if(RedisCache::get($cacheKeyLock)){ return 'Frequent submission'; } // 回调处理 RedisCache::setnx($cacheKeyLock, 1, rand(2,3)); RedisCache::set($cacheKey.'callback', ['params'=> $params,'date'=> $date], 7200); if ($outTradeNo && $amount && $isPay == 'true') { $payConfig = PayConfigService::make()->getInfoByChannel(66, 1); $signKey = isset($payConfig['sign_key'])? $payConfig['sign_key'] : ''; if(empty($payConfig) || empty($signKey)){ return 'Payment config error'; } // 校验签名 if ($paySign) { $signData = $params; unset($signData['sign']); $sign = $service->makeSign($signData, $signKey); if ($sign == $paySign) { Db::startTrans(); try { PaymentService::make()->payBack($params['orderId'], $params['amount'], 66, json_encode($params)); Db::commit(); return 'success'; } catch (\Exception $e) { Db::rollback(); $error = [ 'msg'=> $e->getMessage(), 'trace'=> $e->getTrace(), ]; RedisCache::set($cacheKey.'fail', ['params'=> $params,'error'=> $error,'date'=> $date], 7200); RedisCache::clear($cacheKeyLock); } } else { RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'签名错误','date'=> $date], 7200); } }else{ RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'缺少签名参数','date'=> $date], 7200); } } return 'fail'; } /** * 支付宝支付回调 * @param Request $request * @return mixed */ public function aliResult(Request $request) { $data = $request->param(); $key = isset($data['out_trade_no']) ? $data['out_trade_no'] : date("YmdHis"); $cacheKey = "caches:payNotify:alipay:otn_{$key}:"; RedisCache::set($cacheKey."callback", ['params'=>$data,'date'=>'Y-m-d H:i:s'], 7200); if(empty($data)){ return 'fail:params error'; } try{ return AliPayServices::instance()->data($data)->getNotifyInfo()->afterPay(2); } catch (\Exception $exception){ RedisCache::set($cacheKey.'error', ['params'=>$data,'error'=> ['msg'=> $exception->getMessage(),'trace'=>$exception->getTrace()],'date'=>'Y-m-d H:i:s'], 7200); return 'fail'; } } /** * 微信支付回调 * @param Request $request * @return mixed */ public function wxResult(Request $request) { $data['body'] = file_get_contents('php://input'); $data['header'] = $request->header(); $key = isset($data['body']['out_trade_no']) ? $data['body']['out_trade_no'] : date("YmdHis"); $cacheKey = "caches:payNotify:wxpay:otn_{$key}:"; RedisCache::set($cacheKey."callback", ['params'=>$data,'date'=>'Y-m-d H:i:s'], 7200); if(empty($data['body'])){ return 'fail:params error'; } try{ return \app\api\services\WxPayServices::instance()->data($data)->getNotifyInfo()->afterPay(1); } catch (\Exception $exception){ RedisCache::set($cacheKey.'error', ['params'=>$data,'error'=> ['msg'=> $exception->getMessage(),'trace'=>$exception->getTrace()],'date'=>'Y-m-d H:i:s'], 7200); return 'fail'; } } /** * * thirdPaySqzBack支付三方sqz回调 * @param Request $request * @return string */ public function thirdPaySqzBack(Request $request) { $params = $request->param(); $date = date('Y-m-d H:i:s'); $service = new ThirdPayServices(); $outTradeNo = isset($params['orderid'])? trim($params['orderid']) : ''; $isPay = isset($params['opstate'])? trim($params['opstate']) : '-1'; $amount = isset($params['ovalue'])? floatval($params['ovalue']) : 0; $paySign = isset($params['sign'])? trim($params['sign']) : ''; if(empty($paySign)){ return $service->sqzSign($params); } // 加锁 $key = $outTradeNo? $outTradeNo : date('YmdHis'); $cacheKeyLock = "caches:payNotify:sqzpay:locks:otn_{$key}"; $cacheKey = "caches:payNotify:sqzpay:otn_{$key}:"; if(RedisCache::get($cacheKeyLock)){ return 'Frequent submission'; } // 回调处理 RedisCache::setnx($cacheKeyLock, 1, rand(2,3)); RedisCache::set($cacheKey.'callback', ['params'=> $params,'date'=> $date], 7200); if ($outTradeNo && $isPay>=0 && $amount>0) { // 校验签名 if ($paySign) { $sign = $service->sqzSign($params); if ($sign === $paySign) { if ($isPay == 0) { Db::startTrans(); try { PaymentService::make()->payBack($outTradeNo, $amount, 15, json_encode($params)); Db::commit(); } catch (\Exception $e) { Db::rollback(); $error = [ 'msg'=> $e->getMessage(), 'trace'=> $e->getTrace(), ]; RedisCache::set($cacheKey.'fail', ['params'=> $params,'error'=> $error,'date'=> $date], 7200); RedisCache::clear($cacheKeyLock); return 'opstate=0' . $e->getMessage(); } } else { RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'订单未支付','date'=> $date], 7200); return 'opstate=01'; } } else { RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'协议绑卡签名错误','date'=> $date], 7200); return 'opstate=0'; } } }else{ RedisCache::set($cacheKey.'error', ['params'=> $params,'error'=>'回调参数错误','date'=> $date], 7200); } return 'opstate=0'; } /** * 三方支付宝sqz回调 * @param Request $request * @return string */ public function thirdPaySqzAliBack(Request $request) { $params = $request->param(); if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) { // 校验签名 if (isset($params['sign'])) { $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SIGNKEY')); if ($sign === $params['sign']) { if ($params['opstate'] == 0) { Db::startTrans(); try { $service = new ThirdPayServices(); $service->payBack($params['orderid'], $params['ovalue'], 16, json_encode($params)); Db::commit(); return 'success'; } catch (\Exception $e) { Db::rollback(); sr_log($e->getMessage()); return 'opstate=0' . $e->getMessage(); } } else { return 'opstate=01'; } } else { return 'opstate=0'; } } } return 'opstate=0'; } /** * 支付宝支付回调 多来贝 * @param Request $request * @return mixed */ public function aliResultDLB(Request $request) { sr_log('----------------------支付三方回调-------------------------'); sr_log($request); sr_log($request->param()); sr_log('----------------------支付三方回调-------------------------'); // DLB1649854201945040279940469OP $result = [ 'order_id' => 'DLB1649854201945040279940469OP' ]; $pay_info = Db::name('payment')->where('out_trade_no', $result['order_id'])->find(); if (!$pay_info) { echo 'success'; die(); } else { if ($pay_info['state'] != 7) { echo 'success'; die(); } Db::startTrans(); try { Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态 switch ($pay_info['order_type']) { case 1: // 充值 break; case 3: // 充值会员 // break; case 4: //购买商品 // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray(); // Order::payDoneOrderCallback($order, 3, $pay_info['uid']); $m_goods = new ShopGoodsModel(); $m_user = new UserModel(); $m_shoporder = new ShopOrderModel(); // 更改订单状态 $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find(); $nowTime = date('Y-m-d H:i:s', time()); Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']]) ->update(['pay_type' => 2, 'status' => 1, 'updated_time' => $nowTime]); // 增加销量 $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray(); foreach ($orderGoods as $k => $v) { ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update(); } // 送积分 edit_user_score(5, $order['user_id'], $order['rebate_score']); edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']); break; } Db::commit(); echo 'success'; die; } catch (\Exception $e) { Db::rollback(); echo 'failure'; die; } } echo 'success'; die(); } /** * 微信支付回调 多来贝 * @param Request $request * @return mixed */ public function wechatResultDLB(Request $request) { sr_log('----------------------支付三方回调-------------------------'); sr_log(json_encode($request->param())); sr_log('----------------------支付三方回调-------------------------'); $result = $request->param(); try { if (!$result || !$result['sign']) { sr_log('11111'); echo 'success'; die(); } $sign = thirdPayGetSign($result, '897d9ea909093173b24dd89c772181e4'); if ($result['sign'] != $sign) { sr_log('222222'); echo 'success'; die(); } if ($result['status'] != 1) { sr_log('33333333'); echo 'success'; die(); } } catch (Exception $e) { echo 'success'; sr_log('aaa' . $e->getMessage()); die(); } $pay_info = Db::name('payment')->where('out_trade_no', $result['order_no'])->find(); if (!$pay_info) { sr_log('333333333'); echo 'success'; die(); } else { if ($pay_info['state'] != 7) { sr_log('8888' . '已经处理过了'); echo 'success'; die(); } if ($result['total_amount'] < $pay_info['total_fee']) { sr_testDb(json_encode($pay_info), 1); sr_log('9999' . '支付金额错误'); echo 'success'; die(); } Db::startTrans(); try { Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态 switch ($pay_info['order_type']) { case 1: // 充值 break; case 3: // 充值会员 break; case 4: //购买商品 // 更改订单状态 $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find(); $nowTime = date('Y-m-d H:i:s', time()); Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']]) ->update(['pay_type' => 2, 'status' => 1, 'updated_time' => $nowTime]); // 增加销量 $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray(); foreach ($orderGoods as $k => $v) { ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update(); } // 送积分 edit_user_score(5, $order['user_id'], $order['rebate_score']); edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']); break; } Db::commit(); echo 'success'; die; } catch (\Exception $e) { Db::rollback(); echo 'failure'; sr_log('微信多乐宝报错:' . $e->getMessage()); die; } } echo 'success'; die(); } /** * 微信支付回调 畅联 * @param Request $request * @return mixed */ public function wechatResultCL(Request $request) { sr_log('----------------------支付三方回调-------------------------'); sr_log(json_encode($request->param())); sr_log('----------------------支付三方回调-------------------------'); $result = $request->param(); try { if (!$result || !$result['sign']) { sr_log('cl11111'); echo 'success'; die(); } $sign = thirdPayCheckSignCL($result, 'XMLfjHMPOGexsSaadIWSVCNG0XJBClZZ'); if ($result['sign'] != $sign) { sr_log('cl222222'); echo 'success'; die(); } if ($result['callbacks'] != 'CODE_SUCCESS') { sr_log('cl33333333'); echo 'success'; die(); } } catch (Exception $e) { echo 'success'; sr_log('claaa' . $e->getMessage()); die(); } $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->find(); if (!$pay_info) { sr_log('cl333333333'); echo 'success'; die(); } else { if ($pay_info['state'] != 7) { sr_log('cl8888' . '已经处理过了'); echo 'success'; die(); } if ($result['amount'] < $pay_info['total_fee']) { sr_testDb(json_encode($pay_info), 1); sr_log('cl9999' . '支付金额错误'); echo 'success'; die(); } Db::startTrans(); try { $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->lock(true)->find(); Db::name("thirdpay_back")->insert([ 'out_order_no' => $result['out_trade_no'], 'content' => json_encode($result), 'create_time' => sr_getcurtime(time()), 'type' => 1, 'uid' => $pay_info['uid'] ]); if (empty($pay_info)) { throw new Exception('畅联并发了'); } Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态 switch ($pay_info['order_type']) { case 1: // 充值 break; case 3: // 充值会员 break; case 4: //购买商品 $m_user = new UserModel(); // 更改订单状态 $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find(); $nowTime = date('Y-m-d H:i:s', time()); Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']]) ->update(['status' => 1, 'pay_type' => 7, 'updated_time' => $nowTime]); // 增加销量 $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray(); foreach ($orderGoods as $k => $v) { ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update(); } // 送积分 edit_user_score(5, $order['user_id'], $order['rebate_score']); edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']); break; } Db::commit(); } catch (\Exception $e) { Db::rollback(); sr_log('cl微信报错:' . $e->getMessage()); echo 'failure'; die; } echo 'success'; die(); } echo 'success'; die(); } /** * 支付宝支付回调 畅联 * @param Request $request * @return mixed */ public function AliResultCL(Request $request) { sr_log('----------------------支付三方回调-------------------------'); sr_log(json_encode($request->param())); sr_log('----------------------支付三方回调-------------------------'); $result = $request->param(); $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->find(); if (!$pay_info) { sr_log('cl333333333'); echo 'success'; die(); } else { if ($pay_info['state'] != 7) { sr_log('cl8888' . '已经处理过了'); echo 'success'; die(); } if ($result['amount'] < $pay_info['total_fee']) { sr_testDb(json_encode($pay_info), 1); sr_log('cl9999' . '支付金额错误'); echo 'success'; die(); } $key = 'api' . $request->pathinfo() . $result['out_trade_no']; Db::startTrans(); try { redisLock($key); $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->lock(true)->find(); Db::name("thirdpay_back")->insert([ 'out_order_no' => $result['out_trade_no'], 'content' => json_encode($result), 'create_time' => sr_getcurtime(time()), 'type' => 1, 'uid' => $pay_info['uid'] ]); if (empty($pay_info)) { throw new Exception('畅联支付宝并发了'); } Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态 switch ($pay_info['order_type']) { case 1: // 充值 break; case 3: // 充值会员 break; case 4: //购买商品 $m_user = new UserModel(); // 更改订单状态 $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find(); $nowTime = date('Y-m-d H:i:s', time()); Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']]) ->update(['status' => 1, 'pay_type' => 8, 'updated_time' => $nowTime]); // 增加销量 $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray(); foreach ($orderGoods as $k => $v) { ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update(); } // 送积分 edit_user_score(5, $order['user_id'], $order['rebate_score']); edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']); break; } Db::commit(); } catch (\Exception $e) { Db::rollback(); if ($e->getCode() != apiPingFanCode()) { redisFree($key); } sr_log('cl支付宝报错:' . $e->getMessage()); echo 'failure'; die; } redisFree($key); echo 'success'; die(); } echo 'success'; die(); } /** * mo宝银联回调 富友 * @param Request $request * @return mixed */ public function BankResultFY(Request $request) { $res = file_get_contents('php://input'); sr_log('----------------------支付三方富有回调-------------------------'); sr_log($res); sr_log('----------------------支付三方富有回调-------------------------'); $result = json_decode($res); if (isset($result->mchnt_cd) && isset($result->message) && isset($result->resp_code) && isset($result->resp_desc)) { if ($result->resp_code == 0000) { $res_decode = json_decode(RSA_openssl($result->message, 'decode')); if (isset($res_decode->order_st) && $res_decode->order_st == 1) { $out_trade_no = 'FYYL' . $res_decode->order_id; $pay_info = Db::name('payment')->where('out_trade_no', $out_trade_no)->find(); if ($pay_info) { if ($pay_info['state'] == 7) { if ($res_decode->order_amt < bcmul($pay_info['total_fee'], 100, 0)) { echo 'success'; die(); } $key = 'api' . $request->pathinfo() . $out_trade_no; Db::startTrans(); try { redisLock($key); $pay_info = Db::name('payment')->where('out_trade_no', $out_trade_no)->lock(true)->find(); Db::name("thirdpay_back")->insert([ 'out_order_no' => $out_trade_no, 'content' => json_encode($res_decode), 'create_time' => sr_getcurtime(time()), 'type' => 2, 'uid' => $pay_info['uid'] ]); Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态 switch ($pay_info['order_type']) { case 1: // 充值 break; case 3: // 充值会员 // break; case 4: //购买商品 $m_user = new UserModel(); // 更改订单状态 $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find(); $nowTime = date('Y-m-d H:i:s', time()); Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']]) ->update(['status' => 1, 'pay_type' => 9, 'updated_time' => $nowTime]); // 增加销量 $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray(); foreach ($orderGoods as $k => $v) { ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update(); } $user = $m_user->where('id', $pay_info['uid'])->find(); // 送积分 edit_user_score(5, $order['user_id'], $order['rebate_score']); edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']); // 释放用户福利积分或者锁定积分到余额 $sf_money = intval(intval($pay_info['total_fee']) / 100) * 5; if ($sf_money > 0) { $is_sf = false; if ($user['score_away'] > $sf_money && !$is_sf) { if ($user['score_away'] <= $sf_money) { $sf_money = intval($user['score_away']); } edit_user_score(24, $pay_info['uid'], $sf_money); edit_user_scoreaway(8, $pay_info['uid'], $sf_money); $is_sf = true; } if ($user['score_lock'] > $sf_money && !$is_sf) { edit_user_score(25, $pay_info['uid'], $sf_money); edit_user_lock_score(2, $pay_info['uid'], $sf_money); $is_sf = true; } } break; } Db::commit(); } catch (\Exception $e) { Db::rollback(); if ($e->getCode() != apiPingFanCode()) { redisFree($key); } sr_log('fy支付报错:' . $e->getMessage()); echo 'failure'; die; } } } } } } redisFree($key); echo 'success'; die; } /** * 进件审核回调 * @param Request $request */ public function yplApplyResult(Request $request) { $res = file_get_contents('php://input'); sr_log('----------------------ypl审核回调-------------------------'); sr_log($res); sr_log('----------------------ypl审核回调-------------------------'); echo "0000"; die(); } /** * @param Request $request */ public function ZfbResultYPL(Request $request) { $res = file_get_contents('php://input'); sr_log('----------------------ypl回调-------------------------'); sr_log($res); sr_log('----------------------ypl回调-------------------------'); $res = json_decode($res, true); Db::startTrans(); try { if ($res['payState'] != '00') { echo "0000"; die(); } $pay_info = Db::name('payment')->where('out_trade_no', $res['outTradeNo'])->lock(true)->find(); Db::name("thirdpay_back")->insert([ 'out_order_no' => $res['outTradeNo'], 'content' => json_encode($res), 'create_time' => sr_getcurtime(time()), 'type' => 3, 'uid' => $pay_info['uid'] ]); Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态 switch ($pay_info['order_type']) { case 1: // 充值 break; case 3: // 充值会员 break; case 4: //购买商品 $m_user = new UserModel(); // 更改订单状态 $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find(); $nowTime = date('Y-m-d H:i:s', time()); Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']]) ->update(['status' => 1, 'pay_type' => 8, 'updated_time' => $nowTime]); // 增加销量 $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray(); foreach ($orderGoods as $k => $v) { ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update(); } $user = $m_user->where('id', $pay_info['uid'])->find(); // 送积分 edit_user_score(5, $order['user_id'], $order['rebate_score']); edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']); // 释放用户福利积分或者锁定积分到余额 $sf_money = intval(intval($pay_info['total_fee']) / 100) * 5; if ($sf_money > 0) { $is_sf = false; if ($user['score_away'] > $sf_money && !$is_sf) { if ($user['score_away'] <= $sf_money) { $sf_money = intval($user['score_away']); } edit_user_score(24, $pay_info['uid'], $sf_money); edit_user_scoreaway(8, $pay_info['uid'], $sf_money); $is_sf = true; } if ($user['score_lock'] > $sf_money && !$is_sf) { edit_user_score(25, $pay_info['uid'], $sf_money); edit_user_lock_score(2, $pay_info['uid'], $sf_money); $is_sf = true; } } break; } Db::commit(); } catch (\Exception $e) { Db::rollback(); sr_log('ypl报错:' . $e->getMessage()); echo "0000"; die(); } echo "0000"; die(); } /** * @param Request $request * @return \think\Response */ public function ZfbResultHF(Request $request) { /** * 判断支付异步回调业务处理 * User: shuaishuai.niu * Date: 2020/11/16 * Time: 14:01 */ sr_log('----------------------汇付回调-------------------------'); sr_log($_POST['data']); sr_log('----------------------汇付回调-------------------------'); $params = $_POST['data']; # 加载SDK需要的文件 include_once "../extend/thirdpay/AdapaySdk/init.php"; # 加载商户的配置文件 include_once "../extend/thirdpay/config.php"; $adapay_tools = new \AdaPaySdk\AdapayTools(); $post_data = json_decode($_POST['data'], 1); $post_data_str = json_encode($post_data, JSON_UNESCAPED_UNICODE); $post_sign_str = isset($_POST['sign']) ? $_POST['sign'] : ''; # 先校验签名和返回的数据的签名的数据是否一致 $sign_flag = $adapay_tools->verifySign($post_data_str, $post_sign_str); if ($sign_flag) { Db::startTrans(); try { if ($post_data['status'] != 'succeeded') { sr_throw('成功1'); } $pay_info = Db::name('payment')->where('out_trade_no', $post_data['order_no'])->lock(true)->find(); if ($pay_info['state'] != 7) { sr_throw('成功1'); } $service = new ThirdPayServices(); $service->payBack($post_data['order_no'], 0, 14, json_encode($params)); Db::commit(); } catch (\Exception $e) { Db::rollback(); sr_log('汇付支付宝回调报错:' . $e->getMessage()); return api_succ_return('成功2' . $e->getMessage()); die(); } return api_succ_return('成功'); die(); } else { sr_log('签名不通过:[' . $post_sign_str . ']' . 'post_data_str--[' . $post_data_str . ']'); return api_succ_return('成功1'); die(); } } /** * 代付回调 * @param Request $request * @return string */ public function thirdPayZfbNewBackdf(Request $request) { sr_log('----------------------三方支付宝代付电科回调-------------------------1'); sr_log($request->param()); sr_log('----------------------三方支付宝代付电科回调-------------------------2'); $params = $request->param(); $service = new ThirdPayServices(); if (isset($params['orderId']) && isset($params['amount'])) { // 校验签名 if (isset($params['sign'])) { $back_sign = $params['sign']; unset($params['sign']); $sign = $service->diankesigndf($params); if ($sign == $back_sign) { try { $service->payDfBack($params['orderId'], $params['amount'], $params, json_encode($params)); } catch (Exception $e) { sr_log('电科报错' . $e->getMessage()); return 'success'; } } else { return 'success'; } } } return 'success'; } /** * 三方微信sqz回调 * @param Request $request * @return string */ public function thirdPaySqzWeixinBack(Request $request) { sr_log('----------------------三方微信sqz回调-------------------------'); sr_log($request->param()); sr_log('----------------------三方微信sqz回调-------------------------'); $params = $request->param(); if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) { // 校验签名 if (isset($params['sign'])) { $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SIGNKEY')); if ($sign === $params['sign']) { if ($params['opstate'] == 0) { Db::startTrans(); try { $service = new ThirdPayServices(); $service->payBack($params['orderid'], $params['ovalue'], 17, json_encode($params)); Db::commit(); } catch (\Exception $e) { Db::rollback(); sr_log($e->getMessage()); return 'opstate=0' . $e->getMessage(); } } else { return 'opstate=01'; } } else { return 'opstate=0'; } } } return 'opstate=0'; } /** * 三方银行快捷sqz回调 * @param Request $request * @return string */ public function thirdPaySqzKuaiBack(Request $request) { sr_log('----------------------三方银行快捷sqz回调-------------------------'); sr_log($request->param()); sr_log('----------------------三方银行快捷sqz回调-------------------------'); $params = $request->param(); if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) { // 校验签名 if (isset($params['sign'])) { $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SXY_SIGNKEY')); if ($sign === $params['sign']) { if ($params['opstate'] == 0) { Db::startTrans(); try { $service = new ThirdPayServices(); $service->payBack($params['orderid'], $params['ovalue'], 18, json_encode($params)); Db::commit(); } catch (\Exception $e) { Db::rollback(); sr_log($e->getMessage()); return 'opstate=0' . $e->getMessage(); } } else { return 'opstate=01'; } } else { sr_log('yinsheng快捷银行签名有问题'); return 'opstate=01'; } } } return 'opstate=0'; } /** * Ys银盛第三方支付回调 * @param Request $request * @return string */ public function thirdPayYsBack(Request $request) { $params = $request->post(); $res = $this->sign_verify($params); $date = date('Y-m-d H:i:s'); $outTradeNo = isset($params['out_trade_no']) ? $params['out_trade_no'] : '0'; $cacheKey = "caches:payment:ysBack:{$outTradeNo}"; RedisCache::set($cacheKey . '_param', ['params' => $params, 'sign' => $res, 'date' => $date], 7200); if ($res) { Db::startTrans(); try { $service = new ThirdPayServices(); $service->payBack($params['out_trade_no'], $params['settlement_amount'], 20, json_encode($params), $cacheKey); Db::commit(); } catch (\Exception $e) { Db::rollback(); RedisCache::set($cacheKey . '_fail', ['error' => '银盛回调报错:' . $e->getMessage(), 'params' => $params, 'sign' => $res, 'date' => $date], 7200); return 'success'; } } else { RedisCache::set($cacheKey . '_signFail', ['error' => '银盛签名有问题', 'params' => $params, 'sign' => $res, 'date' => $date], 7200); return 'success'; } return 'success'; } /** * 验签转明码 * @param input check * @param input msg * @return data * @return success */ public function sign_check($sign, $data) { $publickeyFile = env('ZLYS.CER_PATH'); //公钥 $certificateCAcerContent = file_get_contents($publickeyFile); $certificateCApemContent = '-----BEGIN CERTIFICATE-----' . PHP_EOL . chunk_split(base64_encode($certificateCAcerContent), 64, PHP_EOL) . '-----END CERTIFICATE-----' . PHP_EOL; // 签名验证 $success = openssl_verify($data, base64_decode($sign), openssl_get_publickey($certificateCApemContent), OPENSSL_ALGO_SHA1); return $success; } /** * 签名验证 * @param $data * @return bool */ public function sign_verify($data) { //返回的数据处理 $sign = trim($data['sign']); unset($data['sign']); ksort($data); $url = ""; foreach ($data as $key => $val) { /* 验证签名 */ if ($val) $url .= $key . '=' . $val . '&'; } $str = trim($url, '&'); if ($this->sign_check($sign, $str) != true) { return false; } else { return true; } } /** * 用户银行卡绑定回调 * @param Request $request * @return string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function userSignBank(Request $request) { $para = $request->param(); $date = date('Y-m-d H:i:s'); $cacheKey = "caches:userBankSign:callback:"; RedisCache::set($cacheKey . 'param', ['msg' => '支付三方签约sqz回调', 'params' => $para, 'date' => $date], 7200); if (isset($para['userno']) && $para['userno']) { // 校验签名 if (isset($para['orderid']) && isset($para['opstate']) && isset($para['userno']) && isset($para['sign'])) { $sign = md5('orderid=' . $para['orderid'] . '&opstate=' . $para['opstate'] . '&userno=' . $para['userno'] . env('PAYSQZ.SIGNKEY')); if ($sign === $para['sign']) { if (UserBankSignService::make()->checkHasBySignOrderId($para['orderid'])) { // 获取userno 然后保存 Db::name('user_bank_sign')->where('signorder_id', $para['orderid'])->save([ 'userno' => $para['userno'], 'status' => 2 ]); } return 'success'; } else { return 'error'; } } } return 'error'; } /** * 之前对接的支付备份 * @param Request $request * @return \think\Response */ private function payOldAction(Request $request) { $setting = []; $appresource = $request->post('app_sources', ''); $order_type = $request->post('order_type'); if (empty($order_type)) { return api_error_return('参数错误'); } // 商城购买 if ($order_type == 4) { if ($appresource == 'android') { // 石学长 银联支付 array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']); } if ($appresource == 'ios') { // 石学长 银联支付 array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']); } } // 购买服务商 if ($order_type == 6) { if ($appresource == 'android') { // 石学长 银联支付 array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']); // 无卡快捷支付 直连银盛 array_push($setting, ['is_open' => 1, 'channel' => 20, 'title' => '无卡快捷银联支付(支持信用卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']); } if ($appresource == 'ios') { // 石学长 银联支付 array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']); // 无卡快捷支付 array_push($setting, ['is_open' => 1, 'channel' => 20, 'title' => '无卡快捷银联支付(支持信用卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']); } } } }