diff --git a/app/merchant/service/MerchantService.php b/app/merchant/service/MerchantService.php index ea63c03..ad41526 100644 --- a/app/merchant/service/MerchantService.php +++ b/app/merchant/service/MerchantService.php @@ -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; diff --git a/app/merchant/view/merchant/form.html b/app/merchant/view/merchant/form.html index 33aecc7..0217784 100644 --- a/app/merchant/view/merchant/form.html +++ b/app/merchant/view/merchant/form.html @@ -124,6 +124,15 @@ + + +
@@ -378,6 +387,8 @@
+ +
{notempty name='vo.id'}{/notempty}
diff --git a/app/queue/command/kami91order/KamiOrderStatusStandardUp.php b/app/queue/command/kami91order/KamiOrderStatusStandardUp.php index fcc327f..c013005 100644 --- a/app/queue/command/kami91order/KamiOrderStatusStandardUp.php +++ b/app/queue/command/kami91order/KamiOrderStatusStandardUp.php @@ -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]);