gongfuxiang / shopxo

ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服,进销存遵循MIT开源协议发布、基于ThinkPHP8框架研发
https://shopxo.net
MIT License
2.64k stars 799 forks source link

新增微信小程序的发货信息录入和物流公司编码查询 #73

Closed mantoufan closed 2 weeks ago

mantoufan commented 1 year ago

背景

根据微信小程序发货信息管理服务要求,将在微信小程序录入发货信息与微信支付结算挂钩:

根据《商家自营类小程序运营规范》,特定类型的小程序需要在平台完成发货信息录入及确认收货流程后方可进行资金结算。

目的

实现当商城系统发货时,自动同步发货信息及状态到微信小程序。无需手动登录微信小程序后台填写。

自测

以下场景都发生在微信小程序内:client_type = weixin

  1. 快递:用户支付,后台点发货,勾选快递公司,填写快递单号,提交后,用户收到通知,点击查询物流信息 1.1 德邦快递: image 1.2 申通快递: image 1.3 顺丰速运: image

以下物流公司已测试,可发货,可查询物流轨迹: 1.4 韵达速递 1.5 圆通速递 1.6 中通快递 1.7 极兔速递 1.8 邮政快递包裹 1.9 EMS 1.10 京东快递

其中,顺丰速运,无论提供加星,如131****1234,还是完整手机号,首次查询,都需要二次输入手机尾号: image

  1. 自提:后台输入用户提供的自提码后,用户收到通知。对应微信小程序,用户自提发货。无需物流信息 image
  2. 虚拟商品:用户支付,系统自动发货后,用户收到通知。对应微信小程序,虚拟发货。无需物流信息 image

修改

  1. extend/base/Wechat.php

    • 新增 GetMiniDeliveryIdByName 实例方法:根据快递公司名称找到其在微信小程序物流中,对应的公司编码。未找到抛出 no_match_logistics_company_code 错误。
    • 新增 MiniUploadShippingInfo 实例方法:该方法签名中,trade_no buyer_user goods_title 为必填项,缺少将抛出相应的不能为空 **_empty_tips 错误。当商品处于非以上 3 种模式,如展示模式下,请求接口不报错,但返回 no_match_logistics_mode 无匹配的物流模式信息。
    • 原 667 行,新增 json_encode 的第二参数 JSON_UNESCAPED_UNICODE,避免中文转为 Unicode 编码,修复如图问题: image 此处修改可能需要回归其它功能
  2. app/service/OrderService.php

    • 修改 OrderPayHandle 方法,若订单为虚拟商品,调用发货时,将 trade_no buyer_user 传入(因为此时 pay_log 未写入)
    • 修改 OrderDeliveryHandle 方法,对于 client_type = weixin 的订单,获取商品名称、物流公司、收件人电话后,经由 AppMiniUserService 创建 Wechat 实例转译后,调用小程序接口,录入小程序发货信息,通知用户