微信小程序发货信息录入

微信小程序发货信息录入

一、发货信息录入接口

1、 用户交易后,默认资金将会进入冻结状态,开发者在发货后,需要在小程序平台录入相关发货信息,平台会将发货信息以消息的形式推送给购买的微信用户。

2、 如果你已经录入发货信息,在用户尚未确认收货的情况下可以通过该接口修改发货信息,但一个支付单只能更新一次发货信息,请谨慎操作。

3、 如暂时没有完成相关API的对接开发工作,你也可以登陆小程序的后台,通过发货信息管理页面手动录入发货信息。

二、接口及调用方式(https)

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

三、请求及返回参数

1、请求参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/548c6668e21b41fb89bf5684c2b7fe96.png微信小程序发货信息录入_第1张图片
2、响应参数
微信小程序发货信息录入_第2张图片

四、JAVA代码

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;

    }
}

一个在学习的开发者,勿喷,欢迎交流

你可能感兴趣的:(微信小程序,小程序)