1、 用户交易后,默认资金将会进入冻结状态,开发者在发货后,需要在小程序平台录入相关发货信息,平台会将发货信息以消息的形式推送给购买的微信用户。
2、 如果你已经录入发货信息,在用户尚未确认收货的情况下可以通过该接口修改发货信息,但一个支付单只能更新一次发货信息,请谨慎操作。
3、 如暂时没有完成相关API的对接开发工作,你也可以登陆小程序的后台,通过发货信息管理页面手动录入发货信息。
POST https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=ACCESS_TOKEN
1、请求参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/548c6668e21b41fb89bf5684c2b7fe96.png
2、响应参数
1、依赖
org.springframework.boot
spring-boot-starter-web
@Autowired
private RestTemplate restTemplate;
1、测试示例
1.1、 参数说明
transactionId:微信支付返回的支付单号(微信退款也需要用)
2.2、 此方式采用的是自取方式:logistics_type为4,不需要填写物流等信息
2.3、 如果采用发货方式,下方代码注释部分放开即可
public String toSendGoods(String transactionId) {
String accessToken = AccessTokenUtil.getAccessToken();
String url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" + accessToken;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
OrderKey orderKey = new OrderKey();
orderKey.setOrder_number_type(2);
orderKey.setTransaction_id(transactionId);
// orderKey.setMchid("1622649992");
// orderKey.setOut_trade_no("123123123123123");
ShippingList shippingList = new ShippingList();
shippingList.setItem_desc("微信气泡狗集线器*1");
// shippingList.setTracking_no("yyy242144");
// shippingList.setExpress_company("STO");
Payer payer = new Payer();
payer.setOpenid("oP9pG5GWD4yscKE1UZaxifcF7X1g");
JSONObject signObject = new JSONObject();
JSONArray objects = new JSONArray();
objects.add(shippingList);
signObject.put("order_key",orderKey);
signObject.put("delivery_mode",1);
signObject.put("logistics_type",4);
signObject.put("shipping_list",objects);
signObject.put("upload_time","2023-10-23T0:08:35.120+08:00");
signObject.put("payer",payer);
System.out.println(signObject);
HttpEntity requestEntity = new HttpEntity(signObject, headers);
ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
String body = responseEntity.getBody();
JSONObject jsonObject = JSONArray.parseObject(body);
return jsonObject.getString("errcode");
}
2、工具类(getAccessToken方法)
注: 上述获取的accessToken,有效时间2小时,过期后需要再次获取
public class AccessTokenUtil {
public static String getAccessToken() {
log.info("initAccessToken:开始运行...");
String accessToken = null;
//获取tokcen接口
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ Configure.getAppID()+"&secret="+Configure.getSecret();
try {
URL urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET"); // 必须是get方式请求
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
http.connect();
InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
JSONObject demoJson = JSONObject.parseObject(message);
accessToken = demoJson.getString("access_token");
log.info("返回accessToken:"+accessToken);
log.info("initAccessToken:运行结束...");
is.close();
} catch (Exception e) {
e.printStackTrace();
}
return accessToken;
}
}
一个在学习的开发者,勿喷,欢迎交流