欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用java對接微信小程序下單后的發(fā)貨接口

 更新時間:2025年03月15日 10:03:32   作者:angelasp  
這篇文章主要介紹了在微信小程序后臺實現(xiàn)發(fā)貨通知的步驟,包括獲取Access_token、使用RestTemplate調用發(fā)貨接口、處理AccessToken緩存以及發(fā)貨成功后的提醒,需要的朋友可以參考下

配置參數(shù) 

首先需要獲取Access_token,調用前,需要到微信小程序平臺-準備好小程序的appid 和 密鑰secret這兩個參數(shù)。

調用代碼

獲取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.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;
 
    }
}

以上代碼大家還可以使用Spring boot自帶的:RestTemplate

調用發(fā)貨的接口類

@Slf4j
public class HttpUtils {
 
    private final static String CHARSET_DEFAULT = "UTF-8";
 
    /**
     * 上傳小程序發(fā)貨
     *
     * @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);
        //物流單號,物流快遞發(fā)貨時必填
        shippingList.put("tracking_no", trackingNo);
        // 快遞公司編碼,物流快遞發(fā)貨時必填
        shippingList.put("express_company", expressCompany);
 
        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);
        // 發(fā)貨模式,發(fā)貨模式枚舉值:1、UNIFIED_DELIVERY(統(tǒng)一發(fā)貨)2、SPLIT_DELIVERY(分拆發(fā)貨) 示例值: 1
        signObject.put("delivery_mode", 1);
        // 物流模式,發(fā)貨方式枚舉值: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("發(fā)貨信息:{}", signObject);

        // 構建包含請求體數(shù)據(jù)和請求頭的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秒(提前一小段時間結束,以便重新獲取,也可以采用其它的更新策略)

            String 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);
            }

 發(fā)貨成功正常微信端會有以下提醒:

以上代碼在微信小程序服務端后臺-發(fā)貨的方法中直接調用HttpUtils.uploadShippingInfo(String mchId, String outTradeNo, String accessToken, String openid, String desc, String expressCompany, String trackingNo) 即可,其中七個參數(shù)大家需要注意以下就行了。

總結

到此這篇關于如何用java對接微信小程序下單后的發(fā)貨接口的文章就介紹到這了,更多相關java對接微信小程序發(fā)貨接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 異常try?catch的常見四類方式(案例代碼)

    異常try?catch的常見四類方式(案例代碼)

    這篇文章主要介紹了異常try?catch的常見四類方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Springmvc restful配置遇到的小坑

    Springmvc restful配置遇到的小坑

    本文是小編給大家?guī)Я说腟pringmvc restful配置遇到的小小坑,小編給大家?guī)砹藛栴}原因及解決辦法,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-07-07
  • maven父工程relativepath標簽使用解讀

    maven父工程relativepath標簽使用解讀

    文章主要介紹了在使用Maven構建父子工程時如何通過設置父工程和子工程的pom文件來管理依賴和版本,當子工程是Spring Boot項目時,可以通過關閉`relativePath`標簽來繼承Spring Boot的父工程,同時在父工程中使用`dependencyManagement`標簽來統(tǒng)一管理Spring Boot的依賴版本
    2024-11-11
  • java中的transient關鍵字解讀

    java中的transient關鍵字解讀

    這篇文章主要介紹了java中的transient關鍵字解讀,transient關鍵字的主要作用就是讓某些被transient關鍵字修飾的成員屬性變量不被序列化,實際上也正是因此,在學習過程中很少用得上序列化操作,一般都是在實際開發(fā)中,需要的朋友可以參考下
    2023-09-09
  • Java三大特性之多態(tài)詳解

    Java三大特性之多態(tài)詳解

    多態(tài)是繼封裝、繼承之后,面向對象的第三大特性。多態(tài): 是指同一行為,具有多個不同表現(xiàn)形式。本文將來和大家詳細說說Java中的多態(tài),需要的可以了解一下
    2022-10-10
  • 重新啟動IDEA時maven項目SSM框架文件變色所有@注解失效

    重新啟動IDEA時maven項目SSM框架文件變色所有@注解失效

    這篇文章主要介紹了重新啟動IDEA時maven項目SSM框架文件變色所有@注解失效,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • java解決雪花ID在前端精度丟失問題

    java解決雪花ID在前端精度丟失問題

    雪花算法生成的64位Long類型ID在傳遞到前端時可能會因JavaScript的精度限制導致精度丟失,這篇文章主要介紹了java解決雪花ID在前端精度丟失問題的相關資料,需要的朋友可以參考下
    2024-11-11
  • Java中l(wèi)ist根據(jù)id獲取對象的幾種方式

    Java中l(wèi)ist根據(jù)id獲取對象的幾種方式

    這篇文章主要給大家介紹了關于Java中l(wèi)ist根據(jù)id獲取對象的幾種方式,文中通過實例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Java中創(chuàng)建ZIP文件的方法

    Java中創(chuàng)建ZIP文件的方法

    本文通過一段簡單代碼給大家介紹了java中創(chuàng)建zip文件的方法,代碼超簡單,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • Java實現(xiàn)任務超時處理方法

    Java實現(xiàn)任務超時處理方法

    任務超時處理是比較常見的需求,Java中對超時任務的處理有兩種方式,在文中給大家詳細介紹,本文重點給大家介紹Java實現(xiàn)任務超時處理方法,需要的朋友可以參考下
    2019-06-06

最新評論