- 功能說明
- 根據微信小程序規定,特定類型的小程序需要在平臺完成發貨信息錄入及確認收貨流程后方可進行資金結算。這次對接側重點在于資金解凍,只對接了小程序發貨管理 發貨信息錄入接口。如果需要確定收貨和事件功能,請自行對接小程序確認收貨組件和相關消息推送事件。
- 適用范圍
- 小程序后臺左側菜單欄有發貨信息管理的
- 對接說明
- 下載附加文件,在程序根目錄解壓文件
- 按自己需求對接以下功能
- 附加文件說明
- MiniOrderShippingListen 小程序發貨管理事件,處理小程序發貨管理接口所需參數
- MiniOrderShippingJob 接受事件整合好的參數,通過隊列異步調用微信小程序發貨管理接口
- \services\easywechat\orderShipping 對接小程序發貨管理接口
1. 在MiniProgramService中添加發貨信息錄入接口
- 添加引用
use crmeb\services\easywechat\orderShipping\OrderClient;
- 在構造方法中注冊orderShipping服務,如下圖
$this->service->register(new \crmeb\services\easywechat\orderShipping\ServiceProvider);
- 添加order方法獲取OrderClient對象,如下圖
/**
* @return OrderClient *
*/
public function order(){
return $this->service->order_ship;
}
- 添加發貨信息錄入接口
/**
* 上傳訂單
* @param array $order_key 訂單號(商城訂單好)
* @param int $logistics_type 物流模式,發貨方式枚舉值:1、實體物流配送采用快遞公司進行實體物流配送形式 2、同城配送 3、虛擬商品,虛擬商品,例如話費充值,點卡等,無實體配送形式 4、用戶自提
* @param array $shipping_list 物流信息列表,發貨物流單列表,支持統一發貨(單個物流單)和分拆發貨(多個物流單)兩種模式,多重性: [1, 10]
* @param string $payer_openid 支付者,支付者信息
* @param int $delivery_mode 發貨模式,發貨模式枚舉值:1、UNIFIED_DELIVERY(統一發貨)2、SPLIT_DELIVERY(分拆發貨) 示例值: UNIFIED_DELIVERY
* @param bool $is_all_delivered 分拆發貨模式時必填,用于標識分拆發貨模式下是否已全部發貨完成,只有全部發貨完成的情況下才會向用戶推送發貨完成通知。示例值: true/false
* @return array *
* @throws HttpException
*/
public function uploadShippingInfo(array $order_key, int $logistics_type, array $shipping_list, string $payer_openid, string $path, int $delivery_mode = 1, bool $is_all_delivered = true, $type = '')
{
return $this->order()->uploadShippingInfo($order_key, $logistics_type, $shipping_list, $payer_openid, $path, $delivery_mode, $is_all_delivered);
}
2. 配置小程序發貨管理開關
- 在MiniOrderShippingListen事件中,通過 order_shipping_open 字段判斷是否推送小程序發貨信息接口,當字段判斷為true時推送,否則不推送。下面sql是將此開關放到小程序配置里面,也可以在總后臺 維護->配置管理 中自行配置??傊?,當配置于代碼邏輯相對應即可。
- 注意,配置完后要在后臺保存一下配置數據,更新緩存。否則讀取不到數據
INSERT INTO `eb_system_config` (`config_classify_id`, `config_name`, `config_key`, `config_type`, `config_rule`, `config_props`, `required`, `info`, `sort`, `user_type`, `status`, `create_time`) VALUES (48, '小程序發貨管理', 'order_shipping_open', 'switches', '0:關閉\n1:開啟', '0', 0, '如果小程序后臺出現發貨管理菜單欄,請打開此開關', 0, 0, 1, '2023-10-20 09:25:00');
3. 添加event事件,如下圖
路徑:app/event.php
'mini_order_shipping' => [\crmeb\listens\MiniOrderShippingListen::class], // 小程序發貨管理事件
4. 對接普通物流發貨
路徑: app/common/repositories/store/order/StoreOrderRepository.php
在發貨方法添加 delivery() 中添加發貨事件,如下圖
// 小程序發貨管理
event('mini_order_shipping', ['product', $order, $data['delivery_type'], $data['delivery_id'], $data['delivery_name']]);
5. 對接核銷訂單
路徑:app/common/repositories/store/order/StoreOrderRepository.php
在訂單核銷方法 verifyOrder() 中添加,如下圖
//小程序發貨管理
event('mini_order_shipping', ['product', $order, 7, '', '']);
6. 對接購買會員訂單
路徑:app/common/repositories/user/UserOrderRepository.php
在訂單回調 payAfter() 中調用 如下圖
//小程序發貨管理
event('mini_order_shipping', ['member', $ret, 3, '', '']);
7. 對接充值訂單
路徑:app/common/repositories/user/UserRechargeRepository.php
同會員訂單,再支付回調中調用,如下圖
//小程序發貨管理
event('mini_order_shipping', ['recharge', $recharge, 3, '', '']);
注意:如果小程序沒有發貨信息管理,調用發貨信息錄入接口時會報錯,更新完代碼后請重啟swoole