|
@@ -14,6 +14,7 @@ use app\common\model\ShopOrderModel as Order;
|
|
|
use app\common\model\UserBankSignModel;
|
|
|
use app\common\model\UserModel;
|
|
|
use app\common\model\WithDrawLogModel;
|
|
|
+use app\common\service\PayConfigService;
|
|
|
use app\common\service\PaymentService;
|
|
|
use app\common\service\UserBankSignService;
|
|
|
use app\common\service\UserService;
|
|
@@ -23,6 +24,19 @@ use utils\RedisCache;
|
|
|
|
|
|
class ThirdPayServices extends BasePayServices
|
|
|
{
|
|
|
+ protected $dkError = [
|
|
|
+ '40001'=>'请求参数有误(缺少或者格式有误)',
|
|
|
+ '40002'=>'尚未登录/回话超时',
|
|
|
+ '40500'=>'处理扫码付错误',
|
|
|
+ '40510'=>'不支持的通道',
|
|
|
+ '40511'=>'通道已失效',
|
|
|
+ '40513'=>'商户不合法',
|
|
|
+ '40520'=>'订单不存在',
|
|
|
+ '40521'=>'订单已存在',
|
|
|
+ '50001'=>'未授权',
|
|
|
+ '50002'=>'签名错误',
|
|
|
+ ];
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 多乐宝支付宝支付
|
|
@@ -1457,6 +1471,8 @@ class ThirdPayServices extends BasePayServices
|
|
|
|
|
|
|
|
|
$loData['result'] = $result;
|
|
|
+ $code = isset($result['code'])? $result['code'] : '';
|
|
|
+ $msg = isset($this->dkError[$code])? $this->dkError[$code] : '';
|
|
|
RedisCache::set($cacheKey.'result', $loData, 2*86400);
|
|
|
if ($payUrl) {
|
|
|
$payment = [
|
|
@@ -1478,7 +1494,7 @@ class ThirdPayServices extends BasePayServices
|
|
|
return api_succ_return(['msg' => '成功', 'data' => ['pay_url' => $payUrl]]);
|
|
|
|
|
|
} else {
|
|
|
- return api_error_return('支付错误,请联系客服');
|
|
|
+ return api_error_return($msg? '支付错误:'.$msg:'支付错误,请联系客服');
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1494,12 +1510,18 @@ class ThirdPayServices extends BasePayServices
|
|
|
list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $payData);
|
|
|
|
|
|
// 接口地址
|
|
|
-
|
|
|
- $apiUrl = env('PAYDK.DKPAY_API_URL','http://1.14.197.47/proxy/pay/unifiedorder');
|
|
|
+ $payConfig = PayConfigService::make()->getInfoByChannel($pay_way, $order_type);
|
|
|
+ $apiUrl = isset($payConfig['api_url'])? trim($payConfig['api_url']) : '';
|
|
|
+ $apiUrl = $apiUrl? $apiUrl : 'http://1.14.197.47/proxy';
|
|
|
+ $appId = isset($payConfig['app_id'])? trim($payConfig['app_id']) : '';
|
|
|
+ $signKey = isset($payConfig['sign_key'])? trim($payConfig['sign_key']) : '';
|
|
|
+ if(empty($payConfig) || empty($appId) || empty($apiUrl) || empty($signKey)){
|
|
|
+ return api_error_return('支付配置错误,请先配置支付参数');
|
|
|
+ }
|
|
|
|
|
|
$date = date('Y-m-d H:i:s');
|
|
|
$out_trade_no = createdOrderSn();
|
|
|
- $cacheKey = "caches:payment:dkpay:otn_{$out_trade_no}:{$uid}_{$remarks}_";
|
|
|
+ $cacheKey = "caches:payment:dkysf:otn_{$out_trade_no}:{$uid}_{$remarks}_";
|
|
|
RedisCache::set($cacheKey.'payData', ['payData'=> $payData, 'date'=>$date], 2*86400);
|
|
|
|
|
|
// 测试金额
|
|
@@ -1514,31 +1536,34 @@ class ThirdPayServices extends BasePayServices
|
|
|
}
|
|
|
|
|
|
$params = [
|
|
|
- 'appId' => 'dianke',
|
|
|
+ 'appId' => $appId,
|
|
|
'version' => '1.0',
|
|
|
'nonceStr' => nonce_str(15),
|
|
|
'orderId' => $out_trade_no,
|
|
|
'amount' => intval($total_amount * 100),
|
|
|
- 'payChannel' => 'ALP',
|
|
|
+ 'payChannel' => 'WXP',
|
|
|
'goodsName' => $body? $body : '牛仔裤',
|
|
|
'goodsDesc' => $body? $body : '牛仔裤',
|
|
|
'clientIp' => get_client_ip(),
|
|
|
- 'asyncNotifyUrl' => env('PAYSQZ.PAYBACK_ZFB_NEWURL'),
|
|
|
+ 'asyncNotifyUrl' => env('PAYSQZ.PAYBACK_YSF_URL'),
|
|
|
'tradeType' => 'QRCODE'
|
|
|
];
|
|
|
|
|
|
ksort($params);
|
|
|
- $params['sign'] = $this->diankesign($params);
|
|
|
+ $params['sign'] = $this->makeSign($params, $signKey);
|
|
|
|
|
|
// 提交确定支付请求接口
|
|
|
- $loData = ['url'=>$apiUrl,'payData'=> $payData,'params'=> $params, 'date'=>$date];
|
|
|
+ $payApiUrl = $apiUrl.'/pay/unifiedorder';
|
|
|
+ $loData = ['url'=>$payApiUrl,'payData'=> $payData,'payconfig'=>$payConfig,'params'=> $params, 'date'=>$date];
|
|
|
RedisCache::set($cacheKey.'request', $loData, 2*86400);
|
|
|
- $result = curlPost($apiUrl, $params);
|
|
|
+ $result = curlPost($payApiUrl, $params);
|
|
|
$result = $result? json_decode($result, true) : [];
|
|
|
$payUrl = isset($result['data'])? $result['data'] : '';
|
|
|
|
|
|
|
|
|
$loData['result'] = $result;
|
|
|
+ $code = isset($result['code'])? $result['code'] : '';
|
|
|
+ $msg = isset($this->dkError[$code])? $this->dkError[$code] : '';
|
|
|
RedisCache::set($cacheKey.'result', $loData, 2*86400);
|
|
|
if ($payUrl) {
|
|
|
$payment = [
|
|
@@ -1560,7 +1585,7 @@ class ThirdPayServices extends BasePayServices
|
|
|
return api_succ_return(['msg' => '成功', 'data' => ['pay_url' => $payUrl]]);
|
|
|
|
|
|
} else {
|
|
|
- return api_error_return('支付错误,请联系客服');
|
|
|
+ return api_error_return($msg? '支付错误:'.$msg:'支付错误,请联系客服');
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1703,6 +1728,25 @@ class ThirdPayServices extends BasePayServices
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 公共支付签名
|
|
|
+ * @param $data
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function makeSign($data, $signKey='')
|
|
|
+ {
|
|
|
+ ksort($data);
|
|
|
+ $signStr = "";
|
|
|
+ foreach ($data as $key => $val) {
|
|
|
+ $signStr .= $key . '=' . $val . '&';
|
|
|
+ }
|
|
|
+ $stringSignTemp = $signStr . 'key='.$signKey;
|
|
|
+ $signtemp = md5($stringSignTemp);
|
|
|
+
|
|
|
+ return strtoupper($signtemp);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 签名
|
|
|
* @param $data
|
|
|
* @return string
|