微信支付 長鏈接轉短鏈接
-
背景前言:
做了微信的掃碼支付,但是由於微信的二維碼長度過長,生成以後的二維碼識別難度高,所以尋求方法進行解決,剛好,微信就提供了此方法
-
相關文檔地址
-
代碼
/** * 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添加到公衆號的白名單裏面。這樣纔會有正常的接口返回