微信支付 長鏈接轉短鏈接

微信支付 長鏈接轉短鏈接

  • 背景前言:

    做了微信的掃碼支付,但是由於微信的二維碼長度過長,生成以後的二維碼識別難度高,所以尋求方法進行解決,剛好,微信就提供了此方法

  • 相關文檔地址

  • 代碼

    /**
     * https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
     * @return
     */
    public String getWxAccessToken(){
        RestTemplate restTemplate = new RestTemplate();
        String accessTokenUrl = String.format(this.GET_ACCESS_TOKEN,this.APP_ID,this.APP_SECRET);
        String responseStr = restTemplate.getForObject(accessTokenUrl,String.class);
        JSONObject responseJson = JSONObject.parseObject(responseStr);
        if (Optional.ofNullable(responseJson.get("access_token")).isPresent()){
            return responseJson.get("access_token") + "";
        } else {
            log.error("微信獲取AccessToken報錯  錯誤碼:" + responseJson.get("errcode") + "錯誤信息:" + responseJson.get("errmsg"));
        }
        return null;
    }
    
    
    /**
     * https://developers.weixin.qq.com/doc/offiaccount/Account_Management/URL_Shortener.html
     * @param accessToken
     * @param longUrl
     * @return
     */
    public String getWxShortUrl(String accessToken,String longUrl){
        if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(longUrl)){
            return null;
        }
        String shortUrl = String.format(this.GET_WX_SHORT_URL,accessToken);
        RestTemplate restTemplate = new RestTemplate();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("action","long2short");
        jsonObject.put("long_url",longUrl);
        String responseStr = restTemplate.postForObject(shortUrl,jsonObject,String.class);
        JSONObject responseJson = JSONObject.parseObject(responseStr);
        if (ComComstant.SUCCESS_NUM.equals(responseJson.getString("errcode"))){
            return responseJson.getString("short_url");
        } else {
            log.error("微信長鏈接轉成短鏈接報錯  錯誤碼:" + responseJson.get("errcode") + "錯誤信息:" + responseJson.get("errmsg"));
        }
        return null;
    }
    
    
    public String conversionLongUrlByShortUrl(String longUrl){
       String accessToken = this.getWxAccessToken();
       return this.getWxShortUrl(accessToken,longUrl);
    }
    
  • 公衆號配置

    這裏我們需要在請求以上兩個接口的時候,會報錯返回ip,我們需要把此ip添加到公衆號的白名單裏面。這樣纔會有正常的接口返回

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章