feat(merchant): 添加码速达自动发卡功能

- 新增码速达自动发卡设置界面
- 实现码速达账号UID和密钥的保存和使用
- 添加消息订阅功能
- 优化自动发卡逻辑,增加错误处理和状态更新
This commit is contained in:
2025-03-17 03:38:44 +08:00
parent 84856367e9
commit 57171b2f57
12 changed files with 206 additions and 31 deletions

View File

@ -348,8 +348,6 @@ class ChannelProduct extends Controller
$gid_rule = json_encode($gid_rule);
}
$order_limit_rule = array();
foreach ($this->cash as $k => $v) {
$input = input('cash_order_limit_' . $k);

View File

@ -43,7 +43,6 @@ class JunKa extends Core
$suokaRequest = $this->getChanelSuoKaData($cid);
$url = $suokaRequest['suoka_url'];
$request=$param;
$request['agent_id']=$ChanelInfo['mid'];

View File

@ -102,8 +102,6 @@ class Account extends Controller
$data[$k]['account_name'] = '余额账户';
}
if ($data[$k]['num'] > 0) {
if ($v['oper'] == 1) {
$data[$k]['snum'] = '+' . $data[$k]['num'];

View File

@ -375,8 +375,6 @@ class Merchant extends Controller
}
}
/**
* 商户信息查看
* @login true
@ -487,6 +485,8 @@ class Merchant extends Controller
$other_param_arr = json_decode($other_param,true);
if(is_array($other_param_arr) && isset($other_param_arr['autoCardSoftware'])){
$this->autoCardSoftware = $other_param_arr['autoCardSoftware'];
$this->maSuDa_uid = $other_param_arr['maSuDa_uid']??null;
$this->maSuDa_secret_key = $other_param_arr['maSuDa_secret_key']??null;
}
}
@ -499,6 +499,21 @@ class Merchant extends Controller
$other_param_arr_new = [
'autoCardSoftware'=>$autoCardSoftware
];
if($autoCardSoftware == 2){
if(!empty(input('maSuDa_uid'))){
$other_param_arr_new['maSuDa_uid'] = input('maSuDa_uid');
}
if(!empty(input('maSuDa_secret_key'))){
$other_param_arr_new['maSuDa_secret_key'] = input('maSuDa_secret_key');
}
#消息订阅关闭
if(!empty(input('maSuDa_message_config')) ){
$maSuDa_message_config = input('maSuDa_message_config');
}
}
// var_dump($other_params);die;
@ -506,10 +521,16 @@ class Merchant extends Controller
if($other_param && is_string($other_param)){
$other_param_arr = json_decode($other_param,true);
if(is_array($other_param_arr)){
$other_param_arr_new = $other_param_arr;
$other_param_arr_new['autoCardSoftware'] = $autoCardSoftware;
#合并数组
$other_param_arr_news = array_merge($other_param_arr,$other_param_arr_new);
$other_param_arr_new = $other_param_arr_news;
// $other_param_arr_new['autoCardSoftware'] = $autoCardSoftware;
}
}
if (isset($maSuDa_message_config) && isset($other_param_arr_new['maSuDa_message_config'])){
#判断是否变化,进行消息修改 TODO
}
$other_json = json_encode($other_param_arr_new);

View File

@ -229,10 +229,8 @@ class Percent extends Controller
$update['rule'] = $rule;
}
$this->app->db->name('merchant_percent')->where(['id' => $info['id']])->update($update);
}
//PercentService::instance()->get($mid, $product_key, false);
$this->success('操作成功', '');

View File

@ -64,7 +64,6 @@ class MerchantLogService extends Service
{
$data = [ 'mid' => $mid, 'num' => $num, 'account_type' => $account_type, 'type' => $type, 'desc' => $desc ];
if ($type == 2 || $type == 3) {
$data['oper'] = 2;
} else {

View File

@ -107,7 +107,6 @@ class OrderService extends Service
}
}
if (!$info) {
$data['error_account_oper'] = 1;
$data['id'] = $this->db()->insertGetId($data);
@ -173,8 +172,6 @@ class OrderService extends Service
if ($info['cid'] == $cid && ($info['status'] == 2 || $info['status'] == 3 || $info['status'] == 5)) {
return false;
}
$where['id'] = $data['id'] = $info['id'];
$update['pid'] = $pid;
$update['product_key'] = $product_key;

View File

@ -5,7 +5,7 @@
<label class="relative block">
<span class="color-green font-w7">自动发卡设置</span>
<select class="layui-select" name="autoCardSoftware" lay-search lay-filter="stop">
<select class="layui-select" id="autoCardSoftware" name="autoCardSoftware" lay-search lay-filter="stop">
{foreach [1=> '阿奇索', 2=>'码速达'] as $k =>
$v}
{if isset($autoCardSoftware) and $autoCardSoftware eq $k}
@ -19,6 +19,55 @@
<p class="color-desc">请选择正确的发货软件,否则无法发货</p>
</div>
<div class="layui-form-item" id="maSuDa_info" style="display: none;">
<label class="layui-form-item relative block" >
<span class="color-black font-w7">码速达账号UID</span>
<input class="layui-input" placeholder="码速达账号UID" name="maSuDa_uid" value='{$maSuDa_uid|default=""}'/>
<span class="help-block">请填写码速达账号UID请不要随意修改</span>
</label>
<label class="layui-form-item relative block" >
<span class="color-black font-w7">码速达密钥</span>
<input class="layui-input" placeholder="请输入码速达密钥" name="maSuDa_secret_key" value='{$maSuDa_secret_key|default=""}'/>
<span class="help-block">请填写码速达密钥,请不要随意修改</span>
</label>
<label class="layui-form-item margin-top-20 block relative">
<span class="color-green margin-right-10">消息订阅</span>
<div>
{foreach ['1'=>'订阅','2'=>'关闭订阅'] as $k=>$v}
<label class="think-radio">
{if isset($maSuDa_message_config) and $maSuDa_message_config eq $k}
<input checked type="radio" id="maSuDa_message_config" name="maSuDa_message_config" value="{$k}" lay-ignore> {$v|default='2'}
{else}
<input type="radio" id="maSuDa_message_config2" name="maSuDa_message_config" value="{$k}" lay-ignore> {$v|default='2'}
{/if}
</label>
{/foreach}
</div>
<span class="color-desc">如果关闭订阅,则码速达不会收到任何消息</span>
</label>
<div class="layui-form-item" id="maSuDa_message_config_info" >
<label class="layui-form-item margin-top-20 block relative">. <span class="color-green margin-right-10">消息订阅详情</span>
<div>
<input type="checkbox" name="maSuDa_trade_buyer_pay" lay-skin="tag" title="付款消息" >
<input type="checkbox" name="maSuDa_trade_memo_modified" lay-skin="tag" title="订单备注变更">
<input type="checkbox" name="maSuDa_refund_created" lay-skin="tag" title="退款创建">
<input type="checkbox" name="maSuDa_refund_closed" lay-skin="tag" title="退款申请">
</div>
</label>
</div>
</div>
</div>
@ -29,3 +78,42 @@
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消吗?" data-close>取消</button>
</div>
</form>
{block name='script'}
<script> $(document).ready(function() {
// 确保jQuery库已正确加载
// 统一选择器,确保正确获取元素
var $autoCardSoftware = $('#autoCardSoftware');
var $maSuDaInfo = $("#maSuDa_info");
// 初始化状态
function updateMaSuDaInfoVisibility() {
if ($autoCardSoftware.val() === "2") {
$maSuDaInfo.show();
} else {
$maSuDaInfo.hide();
}
}
// 页面加载时初始化
updateMaSuDaInfoVisibility();
// 使用 layui 的 form 模块重新渲染表单
layui.use(['form'], function() {
var form = layui.form;
// 监听 select 的 change 事件
form.on('select(stop)', function(data) {
updateMaSuDaInfoVisibility();
});
// 手动触发一次渲染
form.render();
});
});
</script>
{/block}

View File

@ -82,7 +82,7 @@ class Taobao extends Coretb
}
$data = $this->channel($this->mid, $this->product, true);
var_dump($data);die;
// var_dump($data);die;
$this->yesTB($data, 'submit', $this->order);
}
@ -97,8 +97,8 @@ class Taobao extends Coretb
$this->noTB(401003);
}
$data = $this->channel($this->mid, $this->product, true);
// var_dump($data);die;
$data = $this->channel($this->mid, $this->product, false);
var_dump($data);die;
$this->yesTB($data, 'submit', $this->order);
}

View File

@ -633,6 +633,7 @@ class WeChatBot extends Core
{
if(!$order){
#未传入订单全部信息需要查询订单信息
$order = OrderService::instance()->db()->where(['order_id'=>$order_id])->findOrEmpty();
}

View File

@ -3,6 +3,7 @@
namespace app\queue\command\kami91order;
use app\gateway\service\RedisService;
use app\merchant\service\MerchantService;
use app\merchant\service\OrderService;
use app\order\service\Kami91OrderService;
@ -43,7 +44,6 @@ class KamiOrderChanelNotify extends Command
'product_key','like','%cardbuy%'
];
list($count, $total) = [0, $orderService->db()->where($where)->where($where1)->count()];
$kami91server = Kami91OrderService::instance();
@ -146,7 +146,7 @@ class KamiOrderChanelNotify extends Command
$param['kami'] = $kami;
}
if($info['api_key'] == 'maSuDa'){
if(isset($info['api_key']) && $info['api_key'] == 'maSuDa'){
$info_param = json_decode($info['param'],true);
$param['uid'] = $info_param['buyer_open_uid'];
$param['pid'] = $info['pid'];
@ -164,6 +164,17 @@ class KamiOrderChanelNotify extends Command
if ($check == 'ok') {
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
$maSuDa->huidiao($vo['order_id']);
}else{
#设置查询时间5s避免重复发送redis记录
try{
$redis = RedisService::getInstance();
$redis_key = 'mSD_query'.$info['merchant_order_id'];
$getRedisData = $redis->set($redis_key,[1,time()],600);
#设置查询时间
}catch (\Exception $e){
}
}
}
@ -213,23 +224,80 @@ class KamiOrderChanelNotify extends Command
}
if($info['api_key'] == 'maSuDa'){
if(isset($info['api_key']) && $info['api_key'] == 'maSuDa'){
$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);
$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){
$num = $getRedisData[0];
$time = $getRedisData[1];
if(time() - $time < 10){
$check = $maSuDa->queryFaka($info['merchant_order_id'],$uid,$secretKey);
$num++;
$redis->set($redis_key,[
$num,
$time
],600);
if ($check == 'ok') {
$kami91server->db()->where(['order_id' => $vo['order_id']])->update(['status' => 2]);
$maSuDa->huidiao($vo['order_id']);
}
}else{
$num++;
$redis->set($redis_key,[
$num,
$time
],600);
#num 可以被10整除则发送消息
if($num % 10 == 0){
$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']);
}
}
}else{
$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']);
}
}
}
}
#设置查询时间
}catch (\Exception $e){
$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{
$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']);
}
}
}
}else{
$up_msg=$agiso->notify($info['notifyurl'], $param,$getMerchantInfo);
if($up_msg == 'success'){
@ -245,7 +313,7 @@ class KamiOrderChanelNotify extends Command
#查询卡的状态是否已发送
#判断是否发送
if($info['api_key'] == 'maSuDa'){
if(isset($info['api_key']) && $info['api_key'] == 'maSuDa'){
$info_param = json_decode($info['param'],true);
// $uid= $info_param['buyer_open_uid'];
$other_param = json_decode($getMerchantInfo['other_param'],true);
@ -258,6 +326,7 @@ class KamiOrderChanelNotify extends Command
}else{
#进行锁卡退款。
}
}else{
$check = $agiso->queryFaka($vo['merchant_order_id']);

View File

@ -60,6 +60,13 @@ class KamiOrderStatusForceUpdate extends Command
foreach ($data->toArray() as $vo) {
$count++;
$channelInfo = $channelService->get($vo['cid']);
$response = $vo['response']??[];
if(isset($response)){
$response = json_decode($response,true);
if(!is_array($response)){
$response = [];
}
}
if($channelInfo['suoka_status'] == 1){