java開發微信公眾號----開發者基本配置的


首先附上微信公眾平台開發技術文檔地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5

本文主要描述文檔中1.4部分的開發者的接入部分,省略掉了之前的申請公眾號步驟。

准備工作:

1.必須要有一個可以外網訪問的地址(個人建議:1.內網傳統,如natapp,本人所用的就是natapp  2.買一個雲服務器,百度騰訊等都有)

2.端口號必須設置為80

補充:

本人搭建的是 ssm 框架,IDE為 idea

附上開發配置頁面:

 

流程:

微信公眾平台會訪問用戶輸入的URL,並傳遞四個參數,signature, timestamp, nonce,echostr,我們在方法里接收到這四個參數后,通過 Token(網頁上基本配置里自己輸入的Token),timestamp 和 nonce 排序后拼接成一個字符串,用SHA1加密返回一個新的字符串,用這個字符串與signature比較是否相同,相同則說明是此次請求來自微信公眾平台,返回echostr回去,否則返回一個空字符串即可;

實現:

  

@RequestMapping("/wx")
@Controller
public class WeChatController {

   // 開發配置里自己填寫的Token值
private final String TOKEN = "***********************";

/**
* 1.NeedLogin是自定義的注解,用來攔截未登錄的用戶,微信公眾號開發,不需要登陸攔截,自己開發的時候可以不配置攔截
* 2.文檔說明請求方法為GET請求
* @param request
* @return
*/
@NeedLogin(false)
@RequestMapping(value = "/view.json", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
@ResponseBody
public String view(HttpServletRequest request){
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
if (checkSignature(signature, timestamp, nonce)){
return echostr;
}
return "";
}

private boolean checkSignature(String signature, String timestamp, String nonce){
String [] arr = {TOKEN, timestamp, nonce};
Arrays.sort(arr);
StringBuffer sbf = new StringBuffer();
for (String str : arr){
sbf.append(str);
}
String getSignature = Sha1Util.encode(sbf.toString());
return signature.equals(getSignature);
}
}

SHA1加密的util類網上有很多,本人也是從網上找的一個,代碼如下:
import java.security.MessageDigest;

public class Sha1Util {
private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

private static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文轉換成十六進制的字符串形式
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
return buf.toString();
}

public static String encode(String str) {
if (str == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
messageDigest.update(str.getBytes());
return getFormattedText(messageDigest.digest());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

最后點擊提交按鈕即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM