feat(merchant): 添加自定义回调类功能并优化通知逻辑
- 在商户表单中添加自定义回调类输入框 - 优化卡密通知加密逻辑 -改进订单状态更新和回调信息处理 - 修复了一些通知相关的bug
This commit is contained in:
parent
839a01e114
commit
b2b2fad0c5
@ -569,10 +569,10 @@ class MerchantService extends Service
|
||||
$url = urldecode($url);
|
||||
} else {
|
||||
$url = $merchant['notify_url'];
|
||||
if (strstr($url, '|')) {
|
||||
if (str_contains($url, '|')) {
|
||||
$temp = explode('|', $url);
|
||||
$url = $temp[0];
|
||||
if (strstr($product_key, 'zsycz')) {
|
||||
if (str_contains($product_key, 'zsycz')) {
|
||||
$url = $temp[1];
|
||||
}
|
||||
}
|
||||
@ -658,84 +658,102 @@ class MerchantService extends Service
|
||||
} else {
|
||||
$token = $merchant['appid'] . '|' . $merchant['appsecret'];
|
||||
}
|
||||
// var_dump($result);die;
|
||||
#优化:卡密加密通知
|
||||
if(str_ends_with($product_key, '_cardbuy') && $param['status'] == 2){
|
||||
#暂时优化
|
||||
if ($type == 1) {
|
||||
$orderService = OrderService::instance();
|
||||
} elseif($type == 5) {
|
||||
$orderService = OrderLastHistoryService::instance();
|
||||
}elseif($type == 6) {
|
||||
$orderService = OrderTwoHistoryService::instance();
|
||||
}elseif($type == 7) {
|
||||
$orderService = OrderLastweekHistoryService::instance();
|
||||
}else {
|
||||
$orderService = OrderHistoryService::instance();
|
||||
}
|
||||
$order_infos = $orderService->get('', $result['merchant_order_id'], $merchant['id']);
|
||||
|
||||
if($merchant['kami_status'] == 1 && $merchant['merchant_type'] == 1 && $param['status'] == 2){
|
||||
$ksorderService = OrderService::instance();
|
||||
$ksdata = $ksorderService->get('', $result['merchant_order_id'], $merchant['id']);
|
||||
if(isset($ksdata['response']) && $ksdata['response']){
|
||||
$responseK = json_decode($ksdata['response'],true);
|
||||
if(isset($responseK['kami'])) {
|
||||
$cardno = $responseK['kami']['cardno'];
|
||||
$cardpwd = $responseK['kami']['cardpwd'];
|
||||
$expire_time= $responseK['kami']['expired'];
|
||||
$kami = [
|
||||
'cardno' =>$cardno,
|
||||
'cardpwd' =>$cardpwd,
|
||||
'expire_time' =>$expire_time,
|
||||
];
|
||||
if($merchant['id'] != 7){
|
||||
$kami=implode(',',$kami);
|
||||
$param['card'] = null;
|
||||
if($order_infos){
|
||||
if(isset($order_infos['response']) && $order_infos['response']) {
|
||||
$responseArray = json_decode($order_infos['response'], true);
|
||||
if (isset($responseArray['kami'])) {
|
||||
|
||||
$kami = [
|
||||
'cardno' => $responseArray['kami']['cardno'] ?? null,
|
||||
'cardpwd' => $responseArray['kami']['cardpwd'] ?? null,
|
||||
'expire_time' => $responseArray['kami']['expired'] ?? null
|
||||
];
|
||||
#手动兼容
|
||||
if ($merchant['id'] != 7) {
|
||||
$kami = implode(',', $kami);
|
||||
}
|
||||
|
||||
|
||||
} elseif (isset($order_infos['channel_callback_msg']) && str_contains($order_infos['channel_callback_msg'], "kami")) {
|
||||
$msgArray = json_decode($order_infos['channel_callback_msg'], true);
|
||||
$kami = [
|
||||
'cardno' => $msgArray['kami']['cardno'] ?? null,
|
||||
'cardpwd' => $msgArray['kami']['cardpwd'] ?? null,
|
||||
'expire_time' => $msgArray['kami']['expired'] ?? null,
|
||||
];
|
||||
if ($merchant['id'] != 7) {
|
||||
$kami = implode(',', $kami);
|
||||
}
|
||||
}
|
||||
if(isset($kami)){
|
||||
if($merchant['id'] != 7){
|
||||
$secret=strtolower(md5(md5($token).$param['order_id']));
|
||||
$str=openssl_encrypt($kami, 'DES-EDE3', $secret, OPENSSL_RAW_DATA);
|
||||
$param['card'] = base64_encode($str);
|
||||
}else{
|
||||
$param['card'] = json_encode($kami);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}elseif(isset($ksdata['channel_callback_msg']) && str_contains($ksdata['channel_callback_msg'], "kami")) {
|
||||
$msgK = json_decode($ksdata['channel_callback_msg'], true);
|
||||
$cardno = $msgK['kami']['cardno'];
|
||||
$cardpwd = $msgK['kami']['cardpwd'];
|
||||
$expire_time = $msgK['kami']['expired'];
|
||||
$kami = [
|
||||
'cardno' => $cardno,
|
||||
'cardpwd' => $cardpwd,
|
||||
'expire_time' => $expire_time,
|
||||
];
|
||||
if($merchant['id'] != 7){
|
||||
$kami=implode(',',$kami);
|
||||
}
|
||||
}
|
||||
if($merchant['id'] != 7){
|
||||
$seacret=strtolower(md5(md5($token).$param['order_id']));
|
||||
// $v=substr($seacret, 0,strlen($seacret)/2);
|
||||
$str=openssl_encrypt($kami, 'DES-EDE3', $seacret, OPENSSL_RAW_DATA);
|
||||
$param['card'] = base64_encode($str);
|
||||
}else{
|
||||
$param['card'] = json_encode($kami);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$param = $this->getParam($param, $token, $sign_type);
|
||||
|
||||
switch ($merchant['merchant_type'])
|
||||
{
|
||||
case "5":
|
||||
#分析是否为快手店铺
|
||||
$param = array();
|
||||
$orderkshd = '';
|
||||
$params = array();
|
||||
// if(!isset($orderService)){
|
||||
// #暂时优化
|
||||
// if ($type == 1) {
|
||||
// $orderService = OrderService::instance();
|
||||
// } elseif($type == 5) {
|
||||
// $orderService = OrderLastHistoryService::instance();
|
||||
// }elseif($type == 6) {
|
||||
// $orderService = OrderTwoHistoryService::instance();
|
||||
// }elseif($type == 7) {
|
||||
// $orderService = OrderLastweekHistoryService::instance();
|
||||
// }else {
|
||||
// $orderService = OrderHistoryService::instance();
|
||||
// }
|
||||
// }
|
||||
// $ks_order_data = $orderService->get('', $result['merchant_order_id'], $merchant['id']);
|
||||
$params['orderId'] = $result['merchant_order_id'];
|
||||
$params['mobile'] = $result['account'];
|
||||
|
||||
$ksorderService = OrderService::instance();
|
||||
$ksdata = $ksorderService->get($orderkshd, $result['merchant_order_id'], $merchant['id']);
|
||||
$param['orderId'] = $result['merchant_order_id'];
|
||||
$param['mobile'] = $result['account'];
|
||||
|
||||
$tdtime = strtotime($ksdata['create_at']);
|
||||
$tdtime = date('YmdHis',$tdtime);
|
||||
$tdtime = substr($tdtime,2);
|
||||
\dever\Log::write('gateway', 'test1', $ksdata);
|
||||
#快手订单状态转换
|
||||
if($result['status'] == 2){
|
||||
#成功
|
||||
$param['status'] = 'SUCCESS';
|
||||
$param['bizType'] = '20';
|
||||
$params['status'] = 'SUCCESS';
|
||||
$params['bizType'] = '20';
|
||||
} elseif ($result['status'] == 3) {
|
||||
# 失败...
|
||||
|
||||
$param['status'] = 'FAILED';
|
||||
$param['bizType'] = '20';
|
||||
$param['failCode'] = '4013024';
|
||||
$param['failMsg'] = '上游通道充值失败';
|
||||
$params['status'] = 'FAILED';
|
||||
$params['bizType'] = '20';
|
||||
$params['failCode'] = '4013024';
|
||||
$params['failMsg'] = '上游通道充值失败';
|
||||
} else {
|
||||
# 其他终止...
|
||||
return;
|
||||
@ -745,35 +763,28 @@ class MerchantService extends Service
|
||||
$merchant['agentId'] = $agentId[0];
|
||||
}
|
||||
if (str_ends_with($merchant['agentId'], "_KC")) {
|
||||
$param['bizType'] = '10';
|
||||
$params['bizType'] = '10';
|
||||
$merchant['agentId'] = substr($merchant['agentId'], 0, -3);
|
||||
}
|
||||
|
||||
$param = json_encode($param);
|
||||
$signtime = time();
|
||||
$param = json_encode($params);
|
||||
$signTime = time();
|
||||
|
||||
$sign = 'access_token='.$merchant['access_token'].'&appkey='.$merchant['agentId'].'&method=integration.virtual.topup.mobile.order.callback¶m='.$param.'&signMethod=MD5×tamp='.$signtime.'&version=1';
|
||||
$signmd5 = md5($sign);
|
||||
$param = urlencode($param);
|
||||
$geturl = '?access_token='.$merchant['access_token'].'&appkey='.$merchant['agentId'].'&method=integration.virtual.topup.mobile.order.callback¶m='.$param.'&signMethod=MD5×tamp='.$signtime.'&version=1&sign='.$signmd5;
|
||||
$sign = 'access_token='.$merchant['access_token'].'&appkey='.$merchant['agentId'].'&method=integration.virtual.topup.mobile.order.callback¶m='.$param.'&signMethod=MD5×tamp='.$signTime.'&version=1';
|
||||
$signMd5 = md5($sign);
|
||||
$param = urlencode($params);
|
||||
$geturl = '?access_token='.$merchant['access_token'].'&appkey='.$merchant['agentId'].'&method=integration.virtual.topup.mobile.order.callback¶m='.$param.'&signMethod=MD5×tamp='.$signTime.'&version=1&sign='.$signMd5;
|
||||
break;
|
||||
|
||||
case "8":
|
||||
|
||||
#天猫游戏直充
|
||||
|
||||
// $ksdata = OrderService::instance()->get($result['order_id'], $result['merchant_order_id']);
|
||||
// var_dump($result);die;
|
||||
|
||||
if($result['status'] == 2){
|
||||
#成功
|
||||
|
||||
$apiParams['coop_order_status'] = 'SUCCESS';
|
||||
|
||||
// $rsp_info = '';
|
||||
} elseif ($result['status'] == 3) {
|
||||
# 失败...
|
||||
|
||||
$apiParams['coop_order_status'] = 'FAILED';
|
||||
$apiParams['failed_code'] = '0503';
|
||||
$apiParams['failed_reason'] = '充值失败';
|
||||
@ -782,8 +793,6 @@ class MerchantService extends Service
|
||||
return;
|
||||
}
|
||||
|
||||
// $taobao=new \app\openapi\controller\Taobao($this->app);
|
||||
// $msg = $taobao ->notify($url,$param['merchant_order_id'] ,$merchant,$apiParams)
|
||||
$check = true;
|
||||
|
||||
|
||||
|
@ -124,6 +124,15 @@
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-xs4" id="diy_notify" style="display: none;">
|
||||
<label class="relative block">
|
||||
<span class="font-w7">自定义回调类</span>
|
||||
<input name="diy_notify" value='{$vo.diy_notify|default=""}' placeholder="请输入自定义回调类" class="layui-input">
|
||||
<span class="color-desc">输入自定义回调类名</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
@ -378,6 +387,8 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
|
||||
<div class="layui-form-item text-center">
|
||||
|
@ -64,29 +64,35 @@ class KamiOrderStatusStandardUp extends Command
|
||||
foreach ($data->toArray() as $vo) {
|
||||
$count++;
|
||||
// $orderService = OrderService::instance();
|
||||
if(isset($vo['response'])){
|
||||
$callJson = $vo['response'];
|
||||
if(isset($callJson) && is_string($callJson)) {
|
||||
$callArray = json_decode($callJson, true);
|
||||
if(is_array($callArray)) {
|
||||
if(isset($callArray['kami'])) {
|
||||
$callArray = $callArray['kami'];
|
||||
$callArray['s_number']=$callArray['cardno'];
|
||||
$callJson = json_encode($callArray);
|
||||
#修复存在回调信息的订单,无需更新回调信息,只更新订单状态
|
||||
if(empty($vo['channel_callback_msg'])){
|
||||
if(isset($vo['response'])){
|
||||
$callJson = $vo['response'];
|
||||
if(isset($callJson) && is_string($callJson)) {
|
||||
$callArray = json_decode($callJson, true);
|
||||
if(is_array($callArray)) {
|
||||
if(isset($callArray['kami'])) {
|
||||
$callArray = $callArray['kami'];
|
||||
$callArray['s_number']=$callArray['cardno'];
|
||||
$callJson = json_encode($callArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($callJson) || !is_string($callJson)) {
|
||||
$callJson = '{}';
|
||||
}
|
||||
|
||||
#回调时间更新
|
||||
$channel_callback_at = date('Y-m-d H:i:s');
|
||||
|
||||
|
||||
$orderService->db()->where(['id' => $vo['id']])->update(['status' => 2,'merchant_callback_error' =>2,'channel_callback_msg'=>$callJson,'channel_callback_at'=>$channel_callback_at]);
|
||||
}else{
|
||||
$orderService->db()->where(['id' => $vo['id']])->update(['status' => 2,'merchant_callback_error' =>2]);
|
||||
}
|
||||
|
||||
if(!isset($callJson) || !is_string($callJson)) {
|
||||
$callJson = '{}';
|
||||
}
|
||||
|
||||
#回调时间更新
|
||||
$channel_callback_at = date('Y-m-d H:i:s');
|
||||
|
||||
|
||||
$orderService->db()->where(['id' => $vo['id']])->update(['status' => 2,'merchant_callback_error' =>2,'channel_callback_msg'=>$callJson,'channel_callback_at'=>$channel_callback_at]);
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user