chore(addon): weapp 插件与niushopV5部分代码同步比较
This commit is contained in:
@@ -22,10 +22,40 @@ return [
|
|||||||
'OrderDeliveryAfter' => [
|
'OrderDeliveryAfter' => [
|
||||||
'addon\weapp\event\OrderDeliveryAfter'
|
'addon\weapp\event\OrderDeliveryAfter'
|
||||||
],
|
],
|
||||||
|
// 发货成功后小程序发货
|
||||||
|
'OrderDeliveryAfterWeappDelivery' => [
|
||||||
|
'addon\weapp\event\OrderDeliveryAfterWeappDelivery'
|
||||||
|
],
|
||||||
// 订单收货后执行事件(异步)
|
// 订单收货后执行事件(异步)
|
||||||
'OrderTakeDeliveryAfter' => [
|
'OrderTakeDeliveryAfter' => [
|
||||||
'addon\weapp\event\OrderTakeDeliveryAfter'
|
'addon\weapp\event\OrderTakeDeliveryAfter'
|
||||||
],
|
],
|
||||||
|
/************************** 虚拟发货相关 *****************************/
|
||||||
|
// 盲盒订单支付后
|
||||||
|
'BlindboxOrderPay' => [
|
||||||
|
'addon\weapp\event\BlindboxOrderPay'
|
||||||
|
],
|
||||||
|
// 礼品卡订单支付后
|
||||||
|
'GiftCardOrderPay' => [
|
||||||
|
'addon\weapp\event\GiftCardOrderPay'
|
||||||
|
],
|
||||||
|
// 充值订单支付后
|
||||||
|
'MemberRechargeOrderPay' => [
|
||||||
|
'addon\weapp\event\MemberRechargeOrderPay'
|
||||||
|
],
|
||||||
|
// 超级会员卡订单支付后
|
||||||
|
'MemberLevelOrderPay' => [
|
||||||
|
'addon\weapp\event\MemberLevelOrderPay'
|
||||||
|
],
|
||||||
|
// 积分兑换订单支付后
|
||||||
|
'PointExchangeOrderPay' => [
|
||||||
|
'addon\weapp\event\PointExchangeOrderPay'
|
||||||
|
],
|
||||||
|
// 小程序虚拟发货
|
||||||
|
'WeappVirtualDelivery' => [
|
||||||
|
'addon\weapp\event\WeappVirtualDelivery'
|
||||||
|
],
|
||||||
|
/************************** 虚拟发货相关 *****************************/
|
||||||
],
|
],
|
||||||
|
|
||||||
'subscribe' => [
|
'subscribe' => [
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return [
|
|||||||
'type' => 'system', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
|
'type' => 'system', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
|
||||||
'status' => 1,
|
'status' => 1,
|
||||||
'author' => '',
|
'author' => '',
|
||||||
'version' => '5.3.1',
|
'version' => '5.5.2',
|
||||||
'version_no' => '525231212001',
|
'version_no' => '552250604001',
|
||||||
'content' => '',
|
'content' => '',
|
||||||
];
|
];
|
||||||
@@ -27,6 +27,7 @@ return [
|
|||||||
'url' => 'weapp://shop/weapp/config',
|
'url' => 'weapp://shop/weapp/config',
|
||||||
'is_show' => 0,
|
'is_show' => 0,
|
||||||
'sort' => 2,
|
'sort' => 2,
|
||||||
|
'type' => 'button',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'WEAPP_PACKAGE',
|
'name' => 'WEAPP_PACKAGE',
|
||||||
@@ -34,6 +35,7 @@ return [
|
|||||||
'url' => 'weapp://shop/weapp/package',
|
'url' => 'weapp://shop/weapp/package',
|
||||||
'is_show' => 0,
|
'is_show' => 0,
|
||||||
'sort' => 3,
|
'sort' => 3,
|
||||||
|
'type' => 'button',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'WEAPP_PACKAGE',
|
'name' => 'WEAPP_PACKAGE',
|
||||||
@@ -41,6 +43,7 @@ return [
|
|||||||
'url' => 'weapp://shop/message/config',
|
'url' => 'weapp://shop/message/config',
|
||||||
'is_show' => 0,
|
'is_show' => 0,
|
||||||
'sort' => 4,
|
'sort' => 4,
|
||||||
|
'type' => 'button',
|
||||||
'chile_list' => []
|
'chile_list' => []
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -50,13 +53,15 @@ return [
|
|||||||
'url' => 'weapp://shop/message/edit',
|
'url' => 'weapp://shop/message/edit',
|
||||||
'is_show' => 0,
|
'is_show' => 0,
|
||||||
'sort' => 1,
|
'sort' => 1,
|
||||||
|
'type' => 'button',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'WEAPP_SHARE',
|
'name' => 'WEAPP_SHARE',
|
||||||
'title' => '小程序分享',
|
'title' => '小程序分享',
|
||||||
'url' => 'weapp://shop/weapp/share',
|
'url' => 'weapp://shop/weapp/share',
|
||||||
'is_show' => 0,
|
'is_show' => 0,
|
||||||
'sort' => 6
|
'sort' => 6,
|
||||||
|
'type' => 'button',
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
16
src/addon/weapp/event/BlindboxOrderPay.php
Normal file
16
src/addon/weapp/event/BlindboxOrderPay.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use app\model\system\Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 礼品卡订单支付后
|
||||||
|
*/
|
||||||
|
class BlindboxOrderPay
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
return (new Cron())->addCron(1, 0, "小程序虚拟发货", "WeappVirtualDelivery", time() + 60, $param['out_trade_no']);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/addon/weapp/event/GiftCardOrderPay.php
Normal file
16
src/addon/weapp/event/GiftCardOrderPay.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use app\model\system\Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 礼品卡订单支付后
|
||||||
|
*/
|
||||||
|
class GiftCardOrderPay
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
return (new Cron())->addCron(1, 0, "小程序虚拟发货", "WeappVirtualDelivery", time() + 60, $param['out_trade_no']);
|
||||||
|
}
|
||||||
|
}
|
||||||
73
src/addon/weapp/event/GiftCardOrderPayWeappDelivery.php
Normal file
73
src/addon/weapp/event/GiftCardOrderPayWeappDelivery.php
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use addon\giftcard\model\order\GiftCardOrder;
|
||||||
|
use addon\weapp\model\Weapp;
|
||||||
|
use app\model\member\Member;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 礼品卡订单支付后
|
||||||
|
*/
|
||||||
|
class GiftCardOrderPayWeappDelivery
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$order_model = new GiftCardOrder();
|
||||||
|
$order_condition = array (
|
||||||
|
[ 'order_id', '=', $param['relate_id'] ]
|
||||||
|
);
|
||||||
|
$order_info = $order_model->getOrderInfo($order_condition)[ 'data' ];
|
||||||
|
if (empty($order_info)) {
|
||||||
|
return $order_model->error('', '订单不存在');
|
||||||
|
}
|
||||||
|
if ($order_info[ 'pay_type' ] != 'wechatpay') {
|
||||||
|
return $order_model->success('', '订单未使用微信支付');
|
||||||
|
}
|
||||||
|
|
||||||
|
$weapp_model = new Weapp($order_info[ 'site_id' ]);
|
||||||
|
|
||||||
|
// 检测微信小程序是否已开通发货信息管理服务
|
||||||
|
$is_trade_managed = $weapp_model->orderShippingIsTradeManaged()['data'];
|
||||||
|
if (!$is_trade_managed) {
|
||||||
|
return $weapp_model->success();
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户信息
|
||||||
|
$member_service = new Member();
|
||||||
|
$member_info = $member_service->getMemberInfo([
|
||||||
|
[ 'site_id', '=', $order_info[ 'site_id' ] ],
|
||||||
|
[ 'member_id', '=', $order_info[ 'member_id' ] ]
|
||||||
|
], 'weapp_openid')[ 'data' ];
|
||||||
|
|
||||||
|
// 上传发货信息
|
||||||
|
$shipping_list = [
|
||||||
|
[
|
||||||
|
'tracking_no' => '', // 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]
|
||||||
|
'express_company' => '', // 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128]
|
||||||
|
'item_desc' => $weapp_model->handleOrderShippingItemDesc([$order_info['order_name']]), // 商品信息,例如:微信红包抱枕*1个,限120个字以内
|
||||||
|
'contact' => [
|
||||||
|
'consignor_contact' => '',
|
||||||
|
'receiver_contact' => ''
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$data = [
|
||||||
|
'site_id' => $order_info[ 'site_id' ],
|
||||||
|
'out_trade_no' => $order_info[ 'out_trade_no' ],
|
||||||
|
'logistics_type' => Weapp::LOGISTICS_TYPE_VIRTUAL, // 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式
|
||||||
|
'delivery_mode' => Weapp::UNIFIED_DELIVERY, // 发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)
|
||||||
|
'shipping_list' => $shipping_list,
|
||||||
|
'weapp_openid' => $member_info[ 'weapp_openid' ], // 用户标识,用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128]
|
||||||
|
'is_all_delivered' => true
|
||||||
|
];
|
||||||
|
$res = $weapp_model->orderShippingUploadShippingInfo($data);
|
||||||
|
//dd($data, $res);
|
||||||
|
return $res;
|
||||||
|
}catch(\Exception $e){
|
||||||
|
//dd($e->getFile(), $e->getLine(), $e->getMessage());
|
||||||
|
return error(-1, '小程序上传发货信息错误,'.$e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/addon/weapp/event/MemberLevelOrderPay.php
Normal file
16
src/addon/weapp/event/MemberLevelOrderPay.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use app\model\system\Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 礼品卡订单支付后
|
||||||
|
*/
|
||||||
|
class MemberLevelOrderPay
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
return (new Cron())->addCron(1, 0, "小程序虚拟发货", "WeappVirtualDelivery", time() + 60, $param['out_trade_no']);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/addon/weapp/event/MemberRechargeOrderPay.php
Normal file
16
src/addon/weapp/event/MemberRechargeOrderPay.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use app\model\system\Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 充值订单完成后
|
||||||
|
*/
|
||||||
|
class MemberRechargeOrderPay
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
return (new Cron())->addCron(1, 0, "小程序虚拟发货", "WeappVirtualDelivery", time() + 60, $param['out_trade_no']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use addon\weapp\model\Weapp;
|
||||||
|
use app\model\member\Member;
|
||||||
|
use app\model\system\Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 充值订单完成后
|
||||||
|
*/
|
||||||
|
class MemberRechargeOrderPayWeappDelivery
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
$order_model = new \addon\memberrecharge\model\MemberrechargeOrder();
|
||||||
|
$order_info = $order_model->getMemberRechargeOrderInfo([['order_id', '=', $param['relate_id']]])['data'];
|
||||||
|
|
||||||
|
$weapp_model = new Weapp($order_info[ 'site_id' ]);
|
||||||
|
|
||||||
|
// 检测微信小程序是否已开通发货信息管理服务
|
||||||
|
$is_trade_managed = $weapp_model->orderShippingIsTradeManaged()['data'];
|
||||||
|
if (!$is_trade_managed) {
|
||||||
|
return $weapp_model->success();
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户信息
|
||||||
|
$member_service = new Member();
|
||||||
|
$member_info = $member_service->getMemberInfo([
|
||||||
|
[ 'site_id', '=', $order_info[ 'site_id' ] ],
|
||||||
|
[ 'member_id', '=', $order_info[ 'member_id' ] ]
|
||||||
|
], 'weapp_openid')[ 'data' ];
|
||||||
|
|
||||||
|
// 上传发货信息
|
||||||
|
$shipping_list = [
|
||||||
|
[
|
||||||
|
'tracking_no' => '', // 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]
|
||||||
|
'express_company' => '', // 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128]
|
||||||
|
'item_desc' => $weapp_model->handleOrderShippingItemDesc([$order_info['recharge_name']]), // 商品信息,例如:微信红包抱枕*1个,限120个字以内
|
||||||
|
'contact' => [
|
||||||
|
'consignor_contact' => '',
|
||||||
|
'receiver_contact' => ''
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$data = [
|
||||||
|
'site_id' => $order_info[ 'site_id' ],
|
||||||
|
'out_trade_no' => $order_info[ 'out_trade_no' ],
|
||||||
|
'logistics_type' => Weapp::LOGISTICS_TYPE_VIRTUAL, // 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式
|
||||||
|
'delivery_mode' => Weapp::UNIFIED_DELIVERY, // 发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)
|
||||||
|
'shipping_list' => $shipping_list,
|
||||||
|
'weapp_openid' => $member_info[ 'weapp_openid' ], // 用户标识,用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128]
|
||||||
|
'is_all_delivered' => true
|
||||||
|
];
|
||||||
|
$res = $weapp_model->orderShippingUploadShippingInfo($data);
|
||||||
|
//dd($data, $res);
|
||||||
|
return $res;
|
||||||
|
}catch(\Exception $e){
|
||||||
|
//dd($e->getFile(), $e->getLine(), $e->getMessage());
|
||||||
|
return error(-1, '小程序上传发货信息错误,'.$e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
167
src/addon/weapp/event/OrderDeliveryAfterWeappDelivery.php
Normal file
167
src/addon/weapp/event/OrderDeliveryAfterWeappDelivery.php
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use addon\weapp\model\Weapp;
|
||||||
|
use app\model\order\Order;
|
||||||
|
use app\model\shop\Shop as ShopModel;
|
||||||
|
use app\dict\order\OrderDict;
|
||||||
|
use think\facade\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单发货完成,小程序发货信息录入
|
||||||
|
*/
|
||||||
|
class OrderDeliveryAfterWeappDelivery
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
//订单信息
|
||||||
|
$order_model = new Order();
|
||||||
|
$filed = 'o.order_id,o.site_id,o.order_type,o.out_trade_no,o.pay_type,o.mobile,o.promotion_type,m.weapp_openid';
|
||||||
|
$join = [
|
||||||
|
[ 'member m', 'o.member_id=m.member_id', 'left' ]
|
||||||
|
];
|
||||||
|
$order_info = model('order')->getInfo([ [ 'order_id', '=', $param[ 'relate_id' ] ] ], $filed, 'o', $join);
|
||||||
|
if (empty($order_info)) return $order_model->success();
|
||||||
|
if ($order_info[ 'pay_type' ] != 'wechatpay') return $order_model->success();
|
||||||
|
|
||||||
|
// 检测微信小程序是否已开通发货信息管理服务
|
||||||
|
$weapp_model = new Weapp($order_info[ 'site_id' ]);
|
||||||
|
$is_trade_managed = $weapp_model->orderShippingIsTradeManaged()['data'];
|
||||||
|
if (!$is_trade_managed) return $weapp_model->success();
|
||||||
|
|
||||||
|
//商家信息
|
||||||
|
$shop_model = new ShopModel();
|
||||||
|
$shop_info = $shop_model->getShopInfo([ [ 'site_id', '=', $order_info[ 'site_id' ] ] ], '')[ 'data' ];
|
||||||
|
|
||||||
|
//物流模式和发货方式
|
||||||
|
$logistics_type_config = [
|
||||||
|
OrderDict::express => Weapp::LOGISTICS_TYPE_EXPRESS,
|
||||||
|
OrderDict::local => Weapp::LOGISTICS_TYPE_LOCAL,
|
||||||
|
OrderDict::store => Weapp::LOGISTICS_TYPE_STORE,
|
||||||
|
OrderDict::virtual => Weapp::LOGISTICS_TYPE_VIRTUAL,
|
||||||
|
];
|
||||||
|
$logistics_type = $logistics_type_config[$order_info['order_type']];
|
||||||
|
$delivery_mode = $order_info['order_type'] == OrderDict::express ? Weapp::SPLIT_DELIVERY : Weapp::UNIFIED_DELIVERY;
|
||||||
|
|
||||||
|
//小程序物流公司
|
||||||
|
$delivery_list = [];
|
||||||
|
if ($logistics_type == OrderDict::express) {
|
||||||
|
$delivery_list = $weapp_model->orderShippingGetDeliveryList()[ 'data' ];
|
||||||
|
}
|
||||||
|
//订单商品
|
||||||
|
$order_goods_field = 'order_goods_id,sku_name,num,delivery_no,delivery_status';
|
||||||
|
$order_goods_list = $order_model->getOrderGoodsList([
|
||||||
|
[ 'order_id', '=', $order_info[ 'order_id' ] ]
|
||||||
|
], $order_goods_field, 'order_goods_id asc')[ 'data' ];
|
||||||
|
$order_goods_list = array_column($order_goods_list, null, 'order_goods_id');
|
||||||
|
//寄件人联系方式
|
||||||
|
$consignor_contact = $this->mobileShow($shop_info[ 'mobile' ]);
|
||||||
|
//收件人联系方式
|
||||||
|
$receiver_contact = $this->mobileShow($order_info[ 'mobile' ]);
|
||||||
|
//组装小程序发货信息
|
||||||
|
$shipping_list = [];
|
||||||
|
$delivery_goods_count = 0;
|
||||||
|
$is_all_delivered = true;
|
||||||
|
if ($logistics_type == OrderDict::express) {
|
||||||
|
$package_list = model('express_delivery_package')->getList([
|
||||||
|
[ 'order_id', '=', $order_info[ 'order_id' ] ],
|
||||||
|
], '*');
|
||||||
|
foreach($package_list as $package_info){
|
||||||
|
//商品信息
|
||||||
|
$order_goods_ids = explode(',', $package_info['order_goods_id_array']);
|
||||||
|
$item_desc = [];
|
||||||
|
foreach($order_goods_ids as $order_goods_id){
|
||||||
|
$order_goods_info = $order_goods_list[$order_goods_id];
|
||||||
|
$item_desc_text = $order_goods_info['sku_name'].'*'.$order_goods_info['num'];
|
||||||
|
$item_desc[] = $item_desc_text;
|
||||||
|
$delivery_goods_count ++;
|
||||||
|
}
|
||||||
|
//物流公司
|
||||||
|
$express_company = '';
|
||||||
|
if (!empty($package_info[ 'express_company_name' ]) && !empty($delivery_list)) {
|
||||||
|
$delivery_index = array_search($package_info[ 'express_company_name' ], array_column($delivery_list, 'delivery_name'));
|
||||||
|
if ($delivery_index === false) continue;
|
||||||
|
$express_company = $delivery_list[ $delivery_index ][ 'delivery_id' ];
|
||||||
|
}
|
||||||
|
if(empty($express_company)) continue;
|
||||||
|
//数据结构
|
||||||
|
$item = [
|
||||||
|
'tracking_no' => $package_info[ 'delivery_no' ], // 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]
|
||||||
|
'express_company' => $express_company, // 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128]
|
||||||
|
'item_desc' => $weapp_model->handleOrderShippingItemDesc($item_desc), // 商品信息,例如:微信红包抱枕*1个,限120个字以内
|
||||||
|
'contact' => [
|
||||||
|
'consignor_contact' => $consignor_contact,
|
||||||
|
'receiver_contact' => $receiver_contact,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
//最多只能有9个包裹
|
||||||
|
if(count($shipping_list) < 9){
|
||||||
|
$shipping_list[] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(empty($shipping_list)){
|
||||||
|
$logistics_type = Weapp::LOGISTICS_TYPE_LOCAL;
|
||||||
|
$delivery_mode = Weapp::UNIFIED_DELIVERY;
|
||||||
|
}
|
||||||
|
if($delivery_goods_count < count($order_goods_list)){
|
||||||
|
$is_all_delivered = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//统一发货的发货信息
|
||||||
|
if($delivery_mode == Weapp::UNIFIED_DELIVERY){
|
||||||
|
$item_desc = [];
|
||||||
|
foreach($order_goods_list as $order_goods_info){
|
||||||
|
$item_desc_text = $order_goods_info['sku_name'].'*'.$order_goods_info['num'];
|
||||||
|
$item_desc[] = $item_desc_text;
|
||||||
|
}
|
||||||
|
$shipping_list[] = [
|
||||||
|
'tracking_no' => '', // 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]
|
||||||
|
'express_company' => '', // 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128]
|
||||||
|
'item_desc' => $weapp_model->handleOrderShippingItemDesc($item_desc), // 商品信息,例如:微信红包抱枕*1个,限120个字以内
|
||||||
|
'contact' => [
|
||||||
|
'consignor_contact' => $consignor_contact,
|
||||||
|
'receiver_contact' => $receiver_contact,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$param = [
|
||||||
|
'site_id' => $order_info['site_id'],
|
||||||
|
'out_trade_no' => $order_info['out_trade_no'],
|
||||||
|
'logistics_type' => $logistics_type,
|
||||||
|
'delivery_mode' => $delivery_mode,
|
||||||
|
'shipping_list' => $shipping_list,
|
||||||
|
'weapp_openid' => $order_info[ 'weapp_openid' ],
|
||||||
|
'is_all_delivered' => $is_all_delivered,
|
||||||
|
];
|
||||||
|
$res = $weapp_model->orderShippingUploadShippingInfo($param);
|
||||||
|
//如果是预售,尾款也需要同步发货信息
|
||||||
|
if($order_info['promotion_type'] == 'presale'){
|
||||||
|
$param['out_trade_no'] = $order_info['out_trade_no_2'];
|
||||||
|
$res = $weapp_model->orderShippingUploadShippingInfo($param);
|
||||||
|
}
|
||||||
|
Log::write('小程序发货结果' . json_encode($res, JSON_UNESCAPED_UNICODE));
|
||||||
|
//dd($param,$res);
|
||||||
|
return $res;
|
||||||
|
}catch(\Exception $e){
|
||||||
|
Log::write('小程序发货错误' . json_encode([
|
||||||
|
'file' => $e->getFile(),
|
||||||
|
'line' => $e->getLine(),
|
||||||
|
'message' => $e->getMessage(),
|
||||||
|
], JSON_UNESCAPED_UNICODE));
|
||||||
|
//dd($e->getFile(),$e->getLine(),$e->getMessage());
|
||||||
|
return error(-1, '小程序上传发货信息错误,'.$e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 寄件人和收件人联系方式,采用掩码传输,最后4位数字不能打掩码 示例值: `189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024
|
||||||
|
protected function mobileShow($mobile)
|
||||||
|
{
|
||||||
|
if($mobile){
|
||||||
|
$mobile =substr($mobile, 0, 3) . '****' . substr($mobile, 7);
|
||||||
|
}
|
||||||
|
return $mobile;
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/addon/weapp/event/PointExchangeOrderPay.php
Normal file
19
src/addon/weapp/event/PointExchangeOrderPay.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use app\model\system\Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 礼品卡订单支付后
|
||||||
|
*/
|
||||||
|
class PointExchangeOrderPay
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
//类型 1商品 2优惠券 3红包 商品类型要在真实发货后才同步发货消息
|
||||||
|
if($param['type'] != 1 && $param['exchange_price'] > 0){
|
||||||
|
return (new Cron())->addCron(1, 0, "小程序虚拟发货", "WeappVirtualDelivery", time() + 60, $param['out_trade_no']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
65
src/addon/weapp/event/WeappVirtualDelivery.php
Normal file
65
src/addon/weapp/event/WeappVirtualDelivery.php
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addon\weapp\event;
|
||||||
|
|
||||||
|
use addon\weapp\model\Weapp;
|
||||||
|
use app\model\member\Member;
|
||||||
|
use app\model\system\Pay as PayModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序虚拟发货
|
||||||
|
* 支付后立即调用发货接口,微信会提示订单不存在,所以延迟一分钟执行,如果是
|
||||||
|
* {"errcode":10060001,"errmsg":"支付单不存在 rid: 66235dcf-4803e8cf-5c30a69e"}
|
||||||
|
*/
|
||||||
|
class WeappVirtualDelivery
|
||||||
|
{
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
return $this->delivery($param['relate_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function delivery($out_trade_no)
|
||||||
|
{
|
||||||
|
//获取支付信息
|
||||||
|
$pay_model = new PayModel();
|
||||||
|
$pay_info = $pay_model->getPayInfo($out_trade_no)['data'];
|
||||||
|
if(empty($pay_info)) return success();
|
||||||
|
if ($pay_info[ 'pay_type' ] != 'wechatpay') return success();
|
||||||
|
|
||||||
|
// 检测微信小程序是否已开通发货信息管理服务
|
||||||
|
$weapp_model = new Weapp($pay_info[ 'site_id' ]);
|
||||||
|
$is_trade_managed = $weapp_model->orderShippingIsTradeManaged()['data'];
|
||||||
|
if (!$is_trade_managed) return $weapp_model->success();
|
||||||
|
|
||||||
|
//用户信息
|
||||||
|
$member_service = new Member();
|
||||||
|
$member_info = $member_service->getMemberInfo([
|
||||||
|
[ 'site_id', '=', $pay_info[ 'site_id' ] ],
|
||||||
|
[ 'member_id', '=', $pay_info[ 'member_id' ] ]
|
||||||
|
], 'weapp_openid')[ 'data' ];
|
||||||
|
if(empty($member_info)) return success();
|
||||||
|
|
||||||
|
//组装发货信息
|
||||||
|
$shipping_list = [
|
||||||
|
[
|
||||||
|
'tracking_no' => '', // 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]
|
||||||
|
'express_company' => '', // 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128]
|
||||||
|
'item_desc' => $weapp_model->handleOrderShippingItemDesc([$pay_info['pay_body']]), // 商品信息,例如:微信红包抱枕*1个,限120个字以内
|
||||||
|
'contact' => [
|
||||||
|
'consignor_contact' => '',
|
||||||
|
'receiver_contact' => ''
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$data = [
|
||||||
|
'site_id' => $pay_info[ 'site_id' ],
|
||||||
|
'out_trade_no' => $pay_info[ 'out_trade_no' ],
|
||||||
|
'logistics_type' => Weapp::LOGISTICS_TYPE_VIRTUAL, // 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式
|
||||||
|
'delivery_mode' => Weapp::UNIFIED_DELIVERY, // 发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)
|
||||||
|
'shipping_list' => $shipping_list,
|
||||||
|
'weapp_openid' => $member_info[ 'weapp_openid' ], // 用户标识,用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128]
|
||||||
|
'is_all_delivered' => true
|
||||||
|
];
|
||||||
|
return $weapp_model->orderShippingUploadShippingInfo($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -84,11 +84,10 @@ class Message extends BaseShop
|
|||||||
return $res;
|
return $res;
|
||||||
} else {
|
} else {
|
||||||
if (empty($info)) $this->error("不存在的模板信息!");
|
if (empty($info)) $this->error("不存在的模板信息!");
|
||||||
|
|
||||||
|
|
||||||
$this->assign("keywords", $keywords);
|
$this->assign("keywords", $keywords);
|
||||||
$this->assign("info", $weapp_json_array);
|
$this->assign("info", $weapp_json_array);
|
||||||
$this->assign('weapp_is_open', $info[ 'weapp_is_open' ]);
|
$this->assign('weapp_is_open', $info[ 'weapp_is_open' ]);
|
||||||
|
$this->assign('message_title', $info[ 'title' ]);
|
||||||
return $this->fetch('message/edit');
|
return $this->fetch('message/edit');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.layui-elem-quote{color: #999;}
|
.layui-elem-quote{color: #999;}
|
||||||
.table-btn{justify-content: center;}
|
.table-btn{justify-content: center;}
|
||||||
@@ -8,7 +6,6 @@
|
|||||||
.template-content{white-space:pre;line-height: 1.5;text-align: left}
|
.template-content{white-space:pre;line-height: 1.5;text-align: left}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
<div class="layui-collapse tips-wrap">
|
<div class="layui-collapse tips-wrap">
|
||||||
<div class="layui-colla-item">
|
<div class="layui-colla-item">
|
||||||
<h2 class="layui-colla-title">操作提示</h2>
|
<h2 class="layui-colla-title">操作提示</h2>
|
||||||
@@ -60,8 +57,6 @@
|
|||||||
{{ d.weapp_is_open == 1 ? '已启用' : '已关闭' }}
|
{{ d.weapp_is_open == 1 ? '已启用' : '已关闭' }}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var form,table;
|
var form,table;
|
||||||
layui.use(['form'], function(){
|
layui.use(['form'], function(){
|
||||||
|
|||||||
@@ -8,14 +8,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><span class="required">*</span>模板编号</label>
|
<label class="layui-form-label"><span class="required">*</span>模板名称:</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
{$message_title}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"><span class="required">*</span>模板编号:</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" value="{if $info}{$info.tid}{/if}" placeholder="模板编号" autocomplete="off" class="layui-input len-long" readonly>
|
<input type="text" value="{if $info}{$info.tid}{/if}" placeholder="模板编号" autocomplete="off" class="layui-input len-long" readonly>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item layui-form-text">
|
<div class="layui-form-item layui-form-text">
|
||||||
<label class="layui-form-label"><span class="required"></span>模板内容</label>
|
<label class="layui-form-label"><span class="required">*</span>模板内容:</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<textarea placeholder="" class="layui-textarea len-long" readonly>{if $info}{$info.content}{/if}</textarea>
|
<textarea placeholder="" class="layui-textarea len-long" readonly>{if $info}{$info.content}{/if}</textarea>
|
||||||
</div>
|
</div>
|
||||||
@@ -25,11 +31,10 @@
|
|||||||
|
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||||
<button type="reset" class="layui-btn layui-btn-primary" onclick="back()">返回</button>
|
<button type="reset" class="layui-btn layui-btn-primary" onclick="backMessageList()">返回</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
layui.use(['form', 'colorpicker'], function() {
|
layui.use(['form', 'colorpicker'], function() {
|
||||||
var form = layui.form,
|
var form = layui.form,
|
||||||
@@ -68,7 +73,7 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function back() {
|
function backMessageList() {
|
||||||
location.hash = ns.hash("shop/message/lists");
|
location.hash = ns.hash("shop/message/lists");
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="WEAPP_CSS/wx_access_statistics.css">
|
<link rel="stylesheet" href="WEAPP_CSS/wx_access_statistics.css">
|
||||||
<script src="WEAPP_JS/echarts.min.js"></script>
|
<script src="SHOP_JS/echarts.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<div class="layui-card card-common card-brief">
|
<div class="layui-card card-common card-brief">
|
||||||
<div class="layui-card-header">
|
<div class="layui-card-header">
|
||||||
@@ -88,7 +85,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var daterange = '{:date("Y-m-d", strtotime("-6 days"))} 至 {:date("Y-m-d")}';
|
var daterange = '{:date("Y-m-d", strtotime("-6 days"))} 至 {:date("Y-m-d")}';
|
||||||
|
|||||||
@@ -1,7 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="layui-form">
|
<div class="layui-form">
|
||||||
<div class="layui-card card-common card-brief">
|
<div class="layui-card card-common card-brief">
|
||||||
<div class="layui-card-header">
|
<div class="layui-card-header">
|
||||||
|
|||||||
Reference in New Issue
Block a user