Java 微信小程序-发货信息录入接口 对接代码


微信小程序-发货信息录入接口开发文档

POST https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=ACCESS_TOKEN


一、实体类

1.WxDeliverGoodsDTO

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * 微信小程序-发货信息录入-入参DTO
 *
 * @author hcx
 */
@Data
@Schema(description = "微信小程序-发货信息录入-入参DTO")
public class WxDeliverGoodsDTO implements Serializable {

	@Schema(description = "必填 订单,需要上传物流信息的订单")
	@NotNull(message = "order_key不能为空")
	private OrderKeyDTO order_key;

	@Schema(description = "必填 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提")
	@NotNull(message = "logistics_type不能为空")
	private Integer logistics_type;

	@Schema(description = "必填 发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY")
	@NotNull(message = "delivery_mode不能为空")
	private Integer delivery_mode;

	@Schema(description = "分拆发货模式时必填,用于标识分拆发货模式下是否已全部发货完成,只有全部发货完成的情况下才会向用户推送发货完成通知。示例值: true/false")
	private Boolean is_all_delivered;

	@Schema(description = "必填 物流信息列表,发货物流单列表,支持统一发货(单个物流单)和分拆发货(多个物流单)两种模式,多重性: [1, 10]")
	@NotNull(message = "shipping_list不能为空")
	private List<ShippingDTO> shipping_list;

	@Schema(description = "必填 上传时间,用于标识请求的先后顺序 示例值: `2022-12-15T13:29:35.120+08:00`")
	@NotBlank(message = "upload_time不能为空")
	private String upload_time;

	@Schema(description = "必填 支付者,支付者信息")
	@NotNull(message = "payer不能为空")
	private PayerDTO payer;

}

2.PayerDTO

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;

/**
 * 微信小程序-发货信息录入-入参DTO
 *
 * @author hcx
 */
@Data
public class PayerDTO implements Serializable {

	@Schema(description = "必填 用户标识,用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128]")
	@NotBlank(message = "openid不能为空")
	private String openid;
}

3.ShippingDTO

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;

/**
 * 微信小程序-发货信息录入-入参DTO
 *
 * @author hcx
 */
@Data
public class ShippingDTO implements Serializable {

	@Schema(description = "物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]")
	private String tracking_no;

	@Schema(description = "物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128]")
	private String express_company;

	@Schema(description = "必填 商品信息,例如:微信红包抱枕*1个,限120个字以内")
	@NotBlank(message = "item_desc不能为空")
	private String item_desc;

	@Schema(description = "联系方式,当发货的物流公司为顺丰时,联系方式为必填,收件人或寄件人联系方式二选一")
	private ContactDTO contact;
}

4.ContactDTO

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;

/**
 * 微信小程序-发货信息录入-入参DTO
 *
 * @author hcx
 */
@Data
public class ContactDTO implements Serializable {

	@Schema(description = "寄件人联系方式,寄件人联系方式,采用掩码传输,最后4位数字不能打掩码 示例值: `189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024")
	private String consignor_contact;

	@Schema(description = "收件人联系方式,收件人联系方式为,采用掩码传输,最后4位数字不能打掩码 示例值: `189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024")
	private String receiver_contact;
}

5.OrderKeyDTO

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * 微信小程序-发货信息录入-入参DTO
 *
 * @author hcx
 */
@Data
public class OrderKeyDTO implements Serializable {

	@Schema(description = "必填 订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号和商户侧单号;枚举值2,使用微信支付单号。")
	@NotNull(message = "order_number_type不能为空")
	private Integer order_number_type;

	@Schema(description = "原支付交易对应的微信订单号")
	private String transaction_id;

	@Schema(description = "支付下单商户的商户号,由微信支付生成并下发。")
	private String mchid;

	@Schema(description = "商户系统内部订单号,只能是数字、大小写字母`_-*`且在同一个商户号下唯一")
	private String out_trade_no;
}

二、junit测试接口


import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;

@SpringBootTest
@Slf4j
public class WeiXinApplicationTests {

	/**
	 * 发货信息录入接口-模拟入参
	 */
	private static WxDeliverGoodsDTO getWxDeliverGoodsVo(){
		WxDeliverGoodsDTO vo = new WxDeliverGoodsDTO();
		OrderKeyDTO order_key = new OrderKeyDTO();
		order_key.setMchid("");
		order_key.setOrder_number_type(2);	// 必填
		order_key.setOut_trade_no("");
		order_key.setTransaction_id("fake-transid-20221214190427-1");

		ArrayList<ShippingDTO> list = new ArrayList<>();
		ShippingDTO shipping = new ShippingDTO();
		shipping.setExpress_company("STO");
		shipping.setItem_desc("微信气泡狗集线器*1");	// 必填
		shipping.setTracking_no("fake-trackingno-2022121419042711");
		ContactDTO contact = new ContactDTO();
//		contact.setConsignor_contact("+86-177****1234");
		contact.setConsignor_contact("13278653987".replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));	// 手机号掩码处理
		contact.setReceiver_contact("");
		shipping.setContact(contact);
		list.add(shipping);

		PayerDTO payer = new PayerDTO();
		payer.setOpenid("ogqztkPsejM9MQAFfwCQSCi4oNg3");	// 必填

		vo.setOrder_key(order_key);	// 必填
		vo.setLogistics_type(1);	// 必填
		vo.setDelivery_mode(1);		// 必填
		vo.setIs_all_delivered(false);	// 分拆发货模式时必填
		vo.setShipping_list(list);	// 必填
//		vo.setUpload_time("2022-12-15T13:29:35.120+08:00");	// 必填
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
		vo.setUpload_time(sdf.format(new Date()));	// 必填
		vo.setPayer(payer);	// 必填

		return vo;
	}

	/**
	 * 微信小程序-发货信息录入接口
	 * */
	@Test
	void test01(){
		try {
			String accessToken = "接口调用凭证accessToken";
			String url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token="+accessToken+"";
			/* 获取模拟入参 */
			WxDeliverGoodsVo vo = WeiXinApplicationTests.getWxDeliverGoodsVo();
			String param = JSONObject.toJSONString(vo);
			System.out.println("入参 = " + param);
			String result = HttpUtil.post(url, param);

			JSONObject jsonObject = JSON.parseObject(result);
			int errcode = jsonObject.getInteger("errcode");
			if (errcode != 0) {
				String errmsg = jsonObject.getString("errmsg");
				String err = String.format("微信小程序-发货信息录入接口异常,code码:%s, msg:%s", errcode, errmsg);
				log.error(err);
				throw new CommonException(errcode, "微信小程序-发货信息录入接口异常:" + errmsg);
			}
		} catch (Exception e) {
			throw new CommonException(e.getMessage());
		}
	}
}


三、对接获取 express_company 物流公司编码

参见「查询物流公司编码列表」对接代码

在这里插入图片描述

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值