2024-09-29 15:43:18 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace app\queue\command\kami91order;
|
|
|
|
|
|
|
|
|
|
|
2025-03-17 03:38:44 +08:00
|
|
|
|
use app\gateway\service\RedisService;
|
2025-02-15 19:00:17 +08:00
|
|
|
|
use app\merchant\service\MerchantService;
|
2024-09-29 15:43:18 +08:00
|
|
|
|
use app\merchant\service\OrderService;
|
|
|
|
|
use app\order\service\Kami91OrderService;
|
|
|
|
|
use think\admin\Command;
|
|
|
|
|
use think\console\Input;
|
|
|
|
|
use think\console\Output;
|
|
|
|
|
use think\Collection;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 同步订单状态
|
|
|
|
|
* Class KamiOrderStatusSync
|
|
|
|
|
* @package app\data\command
|
|
|
|
|
*/
|
|
|
|
|
class KamiOrderChanelNotify extends Command
|
|
|
|
|
{
|
|
|
|
|
protected function configure()
|
|
|
|
|
{
|
|
|
|
|
// $this->setName('xQueue:Book');
|
|
|
|
|
// $this->setDescription('导入章节内容');
|
|
|
|
|
$this->setName('xQueue:KamiOrderChanelNotify')->setDescription('[ 卡密列表 - 自动同步 ] 对cardbuy购置的卡密同步响应数据进行异步处理订单回调状态');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param Input $input
|
|
|
|
|
* @param Output $output
|
|
|
|
|
* @throws \think\admin\Exception
|
|
|
|
|
*/
|
|
|
|
|
protected function execute(Input $input, Output $output)
|
|
|
|
|
{
|
|
|
|
|
ini_set('memory_limit', '1024M');
|
|
|
|
|
|
|
|
|
|
$orderService = OrderService::instance();
|
|
|
|
|
$where1 = [
|
|
|
|
|
'status' => '7' ,
|
|
|
|
|
];
|
|
|
|
|
$where[] = [
|
|
|
|
|
|
|
|
|
|
'product_key','like','%cardbuy%'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
list($count, $total) = [0, $orderService->db()->where($where)->where($where1)->count()];
|
|
|
|
|
|
|
|
|
|
$kami91server = Kami91OrderService::instance();
|
2025-02-15 19:00:17 +08:00
|
|
|
|
$agiso =new \app\openapi\controller\agisoAcprSupplierApi\Order($this->app);
|
2024-09-29 15:43:18 +08:00
|
|
|
|
$kami91 =new \app\openapi\controller\Kami91($this->app);
|
2025-02-15 19:02:39 +08:00
|
|
|
|
$maSuDa = new \app\openapi\controller\maSuDaApi\Order($this->app);
|
2024-09-29 15:43:18 +08:00
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
$MerchantService = MerchantService::instance();
|
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
$orderService->db()->where($where)->where($where1)->chunk(100, function (Collection $data) use (&$count, $total,$kami91server,$agiso,$MerchantService,$kami91,$maSuDa) {
|
2024-09-29 15:43:18 +08:00
|
|
|
|
// var_dump($orderlist);die;
|
|
|
|
|
foreach ($data->toArray() as $vo) {
|
|
|
|
|
|
|
|
|
|
$info = $kami91server->db()->where(['order_id' => $vo['order_id']])->find();
|
|
|
|
|
if($info){
|
|
|
|
|
$count++;
|
2025-02-15 19:00:17 +08:00
|
|
|
|
if(isset($info['status'])){
|
|
|
|
|
$getMerchantInfo = $MerchantService->get($vo['mid']);
|
|
|
|
|
if($info['status'] == 4){
|
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
if( $vo['status'] == 7){
|
2025-02-15 19:00:17 +08:00
|
|
|
|
$request_data = [];
|
|
|
|
|
if(empty($info['cardno'])){
|
|
|
|
|
$response = json_decode($vo['response'],true);
|
|
|
|
|
if(isset($response['kami'])) {
|
|
|
|
|
|
|
|
|
|
$cardno = $response['kami']['cardno'];
|
|
|
|
|
$cardpwd = $response['kami']['cardpwd'];
|
2025-06-03 18:55:03 +08:00
|
|
|
|
if(!isset($response['kami']['expired']) || !$response['kami']['expired'] ){
|
|
|
|
|
$expire_time = null;
|
|
|
|
|
}else{
|
|
|
|
|
$expire_time = $this->validateExpireTime($response['kami']['expired']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
// $expire_time= $response['kami']['expired'];
|
|
|
|
|
// $expire_time = null;
|
|
|
|
|
$kami = [
|
|
|
|
|
'cardno' =>$cardno,
|
|
|
|
|
'cardpwd' =>$cardpwd,
|
|
|
|
|
'expire_time' =>$expire_time,
|
|
|
|
|
];
|
|
|
|
|
$kami['status'] = 6;
|
|
|
|
|
|
|
|
|
|
$where = [
|
|
|
|
|
'order_id' => $vo['order_id']
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$result = $kami91server->up($where,$kami);
|
|
|
|
|
|
|
|
|
|
}elseif(isset($vo['channel_callback_msg']) && str_contains($vo['channel_callback_msg'], "kami")){
|
|
|
|
|
$msg = json_decode($vo['channel_callback_msg'],true);
|
|
|
|
|
$cardno = $msg['kami']['cardno'];
|
|
|
|
|
$cardpwd = $msg['kami']['cardpwd'];
|
2025-06-03 18:55:03 +08:00
|
|
|
|
if(!isset($msg['kami']['expired']) || !$msg['kami']['expired'] ){
|
|
|
|
|
$expire_time = null;
|
|
|
|
|
}else{
|
|
|
|
|
$expire_time = $this->validateExpireTime($msg['kami']['expired']);
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
// $expire_time= $msg['kami']['expired'];
|
|
|
|
|
// $expire_time = null;
|
|
|
|
|
$kami = [
|
|
|
|
|
'cardno' =>$cardno,
|
|
|
|
|
'cardpwd' =>$cardpwd,
|
|
|
|
|
'expire_time' =>$expire_time,
|
|
|
|
|
];
|
|
|
|
|
$kami['status'] = 6;
|
|
|
|
|
|
|
|
|
|
$where = [
|
|
|
|
|
'order_id' => $vo['order_id']
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$result =$kami91server->up($where,$kami);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
$kami = [
|
|
|
|
|
'cardno' => $info['cardno'],
|
|
|
|
|
'cardpwd' => $info['cardpwd'],
|
|
|
|
|
'expire_time' => $info['expire_time']
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$where = [
|
|
|
|
|
'order_id' => $vo['order_id']
|
|
|
|
|
];
|
|
|
|
|
$result =$kami91server->up($where,['status' => 6]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
$param = [
|
|
|
|
|
'order_id' => $vo['order_id'],
|
|
|
|
|
'merchant_order_id'=> $info['merchant_order_id'],
|
|
|
|
|
'status' => 2,
|
|
|
|
|
'actual_cash'=>$vo['actual_cash'],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
];
|
|
|
|
|
if(!isset($kami)){
|
|
|
|
|
// $param['status'] =3;
|
|
|
|
|
}else{
|
|
|
|
|
$kami['expired'] = $kami['expire_time'];
|
|
|
|
|
$param['kami'] = $kami;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-17 03:38:44 +08:00
|
|
|
|
if(isset($info['api_key']) && $info['api_key'] == 'maSuDa'){
|
2025-02-15 19:02:39 +08:00
|
|
|
|
$info_param = json_decode($info['param'],true);
|
|
|
|
|
$param['uid'] = $info_param['buyer_open_uid'];
|
|
|
|
|
$param['pid'] = $info['pid'];
|
|
|
|
|
$up_msg = $maSuDa->notify($info['notifyurl'], $param,$getMerchantInfo);
|
|
|
|
|
if($up_msg == 'success'){
|
|
|
|
|
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 6, $up_msg);
|
|
|
|
|
// $other_param = json_decode($getMerchantInfo['other_param'],true);
|
|
|
|
|
//
|
|
|
|
|
// #判断是否发卡
|
|
|
|
|
$other_param = json_decode($getMerchantInfo['other_param'],true);
|
|
|
|
|
$secretKey = $other_param['maSuDa_secret_key'];
|
|
|
|
|
$uid= $other_param['maSuDa_uid'];
|
|
|
|
|
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
|
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
|
|
|
|
|
$maSuDa->huidiao($vo['order_id']);
|
2025-03-17 03:38:44 +08:00
|
|
|
|
}else{
|
|
|
|
|
#设置查询时间5s,避免重复发送,redis记录
|
|
|
|
|
try{
|
|
|
|
|
$redis = RedisService::getInstance();
|
|
|
|
|
$redis_key = 'mSD_query'.$info['merchant_order_id'];
|
2025-04-10 15:08:14 +08:00
|
|
|
|
$getRedisData = $redis->set($redis_key,time(),600);
|
2025-03-17 03:38:44 +08:00
|
|
|
|
#设置查询时间
|
|
|
|
|
}catch (\Exception $e){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-24 16:24:15 +08:00
|
|
|
|
}elseif(isset($info['api_key']) && $info['api_key'] == 'agiso_old'){
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 2, 'success');
|
|
|
|
|
$kami91->huidiao($vo['order_id']);
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}else{
|
|
|
|
|
$up_msg=$agiso->notify($info['notifyurl'], $param,$getMerchantInfo);
|
|
|
|
|
if($up_msg == 'success'){
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 2, $up_msg);
|
|
|
|
|
$agiso->huidiao($vo['order_id']);
|
|
|
|
|
}
|
2025-02-15 19:00:17 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
|
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2024-09-29 15:43:18 +08:00
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if($info['status'] == '6') {
|
|
|
|
|
|
|
|
|
|
$create_at = strtotime($info['create_at']) ;
|
|
|
|
|
|
|
|
|
|
if($info['callback_msg'] != 'success' && $create_at > time() - 600){
|
|
|
|
|
if(isset($info['cardno']) && $info['cardno']){
|
|
|
|
|
$kami = [
|
|
|
|
|
'cardno' => $info['cardno'],
|
|
|
|
|
'cardpwd' => $info['cardpwd'],
|
|
|
|
|
'expired' => $info['expire_time']
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$param = [
|
|
|
|
|
'order_id' => $vo['order_id'],
|
|
|
|
|
'merchant_order_id'=> $info['merchant_order_id'],
|
|
|
|
|
'status' => 2,
|
|
|
|
|
'actual_cash'=>$vo['actual_cash'],
|
|
|
|
|
|
|
|
|
|
];
|
|
|
|
|
if(!isset($kami)){
|
|
|
|
|
// $param['status'] =3;
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
|
|
$param['kami'] = $kami;
|
|
|
|
|
}
|
2025-02-15 19:02:39 +08:00
|
|
|
|
|
|
|
|
|
|
2025-03-17 03:38:44 +08:00
|
|
|
|
if(isset($info['api_key']) && $info['api_key'] == 'maSuDa'){
|
2025-02-15 19:02:39 +08:00
|
|
|
|
$info_param = json_decode($info['param'],true);
|
|
|
|
|
$param['uid'] = $info_param['buyer_open_uid'];
|
|
|
|
|
$param['pid'] = $info['pid'];
|
2025-03-17 03:38:44 +08:00
|
|
|
|
$other_param = json_decode($getMerchantInfo['other_param'],true);
|
|
|
|
|
$secretKey = $other_param['maSuDa_secret_key'];
|
|
|
|
|
$uid= $other_param['maSuDa_uid'];
|
|
|
|
|
try{
|
|
|
|
|
$redis = RedisService::getInstance();
|
|
|
|
|
$redis_key = 'mSD_query'.$info['merchant_order_id'];
|
|
|
|
|
$getRedisData = $redis->get($redis_key);
|
|
|
|
|
if($getRedisData){
|
2025-04-10 15:08:14 +08:00
|
|
|
|
$times = time() - $getRedisData;
|
|
|
|
|
if($times < 10){
|
2025-03-17 03:38:44 +08:00
|
|
|
|
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
|
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
|
|
|
|
|
$maSuDa->huidiao($vo['order_id']);
|
|
|
|
|
}
|
|
|
|
|
}else{
|
2025-04-10 15:08:14 +08:00
|
|
|
|
$redis->set($redis_key,time(),600);
|
2025-03-17 03:38:44 +08:00
|
|
|
|
$up_msg = $maSuDa->notify($info['notifyurl'], $param,$getMerchantInfo);
|
|
|
|
|
if($up_msg == 'success'){
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 6, $up_msg);
|
|
|
|
|
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
|
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$redis->delete($redis_key);
|
|
|
|
|
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
|
|
|
|
|
$maSuDa->huidiao($vo['order_id']);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-04-10 15:08:14 +08:00
|
|
|
|
|
2025-03-17 03:38:44 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#设置查询时间
|
|
|
|
|
}catch (\Exception $e){
|
2025-02-15 19:02:39 +08:00
|
|
|
|
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
|
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
|
|
|
|
|
$maSuDa->huidiao($vo['order_id']);
|
2025-03-17 03:38:44 +08:00
|
|
|
|
}else{
|
|
|
|
|
$up_msg = $maSuDa->notify($info['notifyurl'], $param,$getMerchantInfo);
|
|
|
|
|
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
|
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
|
|
|
|
|
$maSuDa->huidiao($vo['order_id']);
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}
|
2025-03-17 03:38:44 +08:00
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-03-17 03:38:44 +08:00
|
|
|
|
|
2025-03-24 16:24:15 +08:00
|
|
|
|
}elseif(isset($info['api_key']) && $info['api_key'] == 'agiso_old'){
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 2, 'success');
|
|
|
|
|
$kami91->huidiao($vo['order_id']);
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}else{
|
|
|
|
|
$up_msg=$agiso->notify($info['notifyurl'], $param,$getMerchantInfo);
|
|
|
|
|
if($up_msg == 'success'){
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 2, $up_msg);
|
|
|
|
|
$agiso->huidiao($vo['order_id']);
|
|
|
|
|
}
|
2025-02-15 19:00:17 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
}else{
|
2025-02-15 19:02:39 +08:00
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
#查询卡的状态是否已发送
|
2025-02-15 19:02:39 +08:00
|
|
|
|
#判断是否发送
|
2025-03-17 03:38:44 +08:00
|
|
|
|
if(isset($info['api_key']) && $info['api_key'] == 'maSuDa'){
|
2025-02-15 19:02:39 +08:00
|
|
|
|
$info_param = json_decode($info['param'],true);
|
|
|
|
|
// $uid= $info_param['buyer_open_uid'];
|
|
|
|
|
$other_param = json_decode($getMerchantInfo['other_param'],true);
|
|
|
|
|
$secretKey = $other_param['maSuDa_secret_key'];
|
|
|
|
|
$uid= $other_param['maSuDa_uid'];
|
|
|
|
|
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
|
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
|
|
|
|
|
$maSuDa->huidiao($vo['order_id']);
|
|
|
|
|
}else{
|
|
|
|
|
#进行锁卡退款。
|
2025-02-15 19:00:17 +08:00
|
|
|
|
|
2025-03-17 03:38:44 +08:00
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}
|
2025-03-24 16:24:15 +08:00
|
|
|
|
}elseif(isset($info['api_key']) && $info['api_key'] == 'agiso_old'){
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 2, 'success');
|
|
|
|
|
$kami91->huidiao($vo['order_id']);
|
2025-02-15 19:02:39 +08:00
|
|
|
|
}else{
|
|
|
|
|
$check = $agiso->queryFaka($vo['merchant_order_id']);
|
2025-02-15 19:00:17 +08:00
|
|
|
|
|
2025-02-15 19:02:39 +08:00
|
|
|
|
if ($check == 'ok') {
|
|
|
|
|
$msg = 'success';
|
|
|
|
|
if ($vo['response']) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
$kami91server->upStatus($vo['order_id'], 2, $msg);
|
|
|
|
|
$kami91->huidiao($vo['order_id']);
|
2025-02-15 19:00:17 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-15 19:02:39 +08:00
|
|
|
|
|
2024-09-29 15:43:18 +08:00
|
|
|
|
}
|
2025-02-15 19:00:17 +08:00
|
|
|
|
|
2024-09-29 15:43:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} elseif (empty($info['cardno'])){
|
|
|
|
|
|
|
|
|
|
$kami91->uphuidiao($vo['order_id']);
|
|
|
|
|
}
|
|
|
|
|
$this->setQueueProgress("处理完订单状态 {$vo['order_id']} ", $count / $total * 100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
//
|
|
|
|
|
$this->setQueueSuccess("处理完 {$count} 个订单状态完成!");
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-15 19:00:17 +08:00
|
|
|
|
private function validateExpireTime($expireTime)
|
|
|
|
|
{
|
|
|
|
|
if (strtotime($expireTime) === false) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return $expireTime;
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-29 15:43:18 +08:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|