如何用java对接微信小程序下单后的发货接口

2025-03-15 13:50

本文主要是介绍如何用java对接微信小程序下单后的发货接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok...

配置参数 

首先需要获取Access_token,调用前,需要到微信小程序平台-准备好小程序的appid 和 密钥secret这两个参数。

调用代码

获取Access_token

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
 
import Java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
 
/**
 * @author Alcedo
 * @date 2024/12/08
 * @apiNote
 */
@Slf4j
public class AccessTokenUtil {
    /**
     * 获取accessToken
     * @param appid 小程序appid
     * @param secret 小程序secret
     * @return
     */
    public static String getAccessToken(String appid, String secret) {
        log.info("initAccessToken:开始运行...");
        String accessToken = null;
        //获取tokcen接口
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appid+"&secret="+secret;
        try {
            URL urlGet = new URL(url);
            HttpURLConnection http = (HttpURLConnection) urlGet.opeChina编程nConnection();
            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;
 
    }
}

以上代码大家还可以使用Spring boot自带的:RestTemplate

调用发货的接口类

@Slf4j
public class HttpUtils {
 
    private final static String CHARSET_DEFAULT = "InpysPYYFUTF-8";
 
    /**
     * 上传小程序发货
     *
     * @param mchId          商户号
     * @param outTradeNo     商户订单号
     * @param accessToken    accessToken
     * @param openid         买家openid
     * @param expressCompany 快递公司编码
     * @param trackingNo     快递单号
     * @return
     */
    public static String uploadShippingInfo(String mchId, String outTradeNo, String accessToken, String openid, String desc, String expressCompany, String trackingNo) {
        RestTemplate restTemplate = new RestTemplate();
        String url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" + accessToken;
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON);
 
        JSONObject orderKey = new JSONObject();
        // 订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号和商户侧单号;枚举值2,使用微信支付单号。
        orderKey.put("order_number_type", 1);
        orderKey.put("mchid", mchId);
        //orderKey.put("transaction_id",transactionId);
        orderKey.put("out_trade_no", outTradeNo);
 
        JSONObject shippingList = new JSONObject();
        //商品信息
        shippingList.put("item_desc", desc);
      android  //物流单号,物流快递发货时必填
        shippingList.put("tracking_no", trackingNo);
        // 快递公司编码,物流快递发货时必填
        shippingList.put("express_company", expressCjsompany);
 
        JSONObject payer = new JSONObject();
        payer.put("openid", openid);
 
        JSONObject signObject = new JSONObject();
        JSONArray shipping_list = new JSONArray();
        shipping_list.add(shippingList);
 
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        String uploadTime = simpleDateFormat.format(System.currentTimeMillis());
 
        signObject.put("order_key", orderKey);
        // 发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: 1
        signObject.put("delivery_mode", 1);
        // 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提
        signObject.put("logistics_type", 4);
        signObject.put("shipping_list", shipping_list);
        signObject.put("upload_time", uploadTime);
        signObject.put("payer", payer);
        log.info("发货信息:{}", signObject);

        // 构建包含请求体数据和请求头的HttpEntity对象
        HttpEntity<JSONObject> requestEntity = new HttpEntity<JSONObject>(signObject, headers);

        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
        String body = responseEntity.getBody();
        JSONObject jsonObject = JSONUtil.parseObj(body);
        String errcode = jsonObject.getString("errcode");
        return errcode;
    }
 
}

注意点

以上AccessToken的有效期是7200秒,为了减少调用,可以保存在本地缓存,如:Redis,并设置为7000秒(提前一小段时间结束,以便重新获取,也可以采用其它的更新策略)

            androidString accessToken = (String) stringRedisService.get(StringEnum.WECHAT_ACCESS_TOKEN.getCode());
            if (StringUtils.isEmpty(accessToken)) {
                accessToken = AccessTokenUtil.getAccessToken(appid, secret);
                log.info("Access token: " + accessToken);
                stringRedisService.set(StringEnum.WECHAT_ACCESS_TOKEN.getCode(), accessToken, 7000);
            }

 发货成功正常微信端会有以下提醒:

如何用java对接微信小程序下单后的发货接口

以上代码在微信小程序服务端后台-发货的方法中直接调用HttpUtils.uploadShippingInfo(String mchId, String outTradeNo, String accessToken, String openid, String desc, String expressCompany, String trackingNo) 即可,其中七个参数大家需要注意以下就行了。

总结

到此这篇关于如何用java对接微信小程序下单后的发货接口的文章就介绍到这了,更多相关java对接微信小程序发货接口内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于如何用java对接微信小程序下单后的发货接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153766

相关文章

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

什么是 Java 的 CyclicBarrier(代码示例)

《什么是Java的CyclicBarrier(代码示例)》CyclicBarrier是多线程协同的利器,适合需要多次同步的场景,本文通过代码示例讲解什么是Java的CyclicBarrier,感... 你的回答(口语化,面试场景)面试官:什么是 Java 的 CyclicBarrier?你:好的,我来举个例

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在