• 微信小程序发货信息录入


    微信小程序发货信息录入

    一、发货信息录入接口

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

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

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

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

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

    三、请求及返回参数

    1、请求参数
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/548c6668e21b41fb89bf5684c2b7fe96.png在这里插入图片描述
    2、响应参数
    在这里插入图片描述

    四、JAVA代码

    1、依赖

    
      org.springframework.boot
      spring-boot-starter-web
    
    
    @Autowired
    private RestTemplate restTemplate;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    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;
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

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

  • 相关阅读:
    复制带随机指针的链表
    GitLab 502问题解决方案
    2019-10《信息资源管理 02378》真卷(独家文字版),圈定章节考点+统计真题分布
    CSDN高质量:备战金九银十的Java八股文,看完这篇就够了
    计算机保研复习
    看卡塔尔世界杯,diff一下足球比赛与软件开发
    GFS分布式文件系统
    【附源码】计算机毕业设计JAVA助农脱贫系统
    java培训之SpringMVC提示消息的国际化
    Unity 代码控制Text文本换行
  • 原文地址:https://blog.csdn.net/m0_55841258/article/details/134078185