微信開發=====>內網穿透=====>使用java後臺流程
阿新 • • 發佈:2018-11-08
1.在natapp的程式下建立config.ini配置檔案輸入以下內容
新增自己的authtoken
主要減少每次輸入命令啟動 https://natapp.cn/article/config_ini
#將本檔案放置於natapp同級目錄 程式將讀取 [default] 段 #在命令列引數模式如 natapp -authtoken=xxx 等相同引數將會覆蓋掉此配置 #命令列引數 -config= 可以指定任意config.ini檔案 [default] authtoken= #對應一條隧道的authtoken clienttoken= #對應客戶端的clienttoken,將會忽略authtoken,若無請留空, log=none #log 日誌檔案,可指定本地檔案, none=不做記錄,stdout=直接螢幕輸出 ,預設為none loglevel=ERROR #日誌等級 DEBUG, INFO, WARNING, ERROR 預設為 DEBUG http_proxy= #代理設定 如 http://10.123.10.10:3128 非代理上網使用者請務必留空
2.需要在natapp上修改建立的免費隧道(購買的隧道也是大體一致)
修改的地方:
1.名稱 這個是隨意的 可以改可以不改
2.本地地址 這個是本地的ip地址 如果在自己的電腦跑專案可以不用
3.本地埠: 對應的你的專案啟動埠 需要注意 我的是8080 預設是80
3.啟動natapp程式
4.這是我的專案訪問http://xutkk9.natappfree.cc/mini/specialProduct
返回的資料 到目前為止,如果不進行微信開 ,其他的人可以在公網上可以訪問你的專案了 但是由於我是微信開發還需以下步驟 { "status": 80200, "message": "success", "data": [{ "sn": "P489356631472123904", "title": "龍蟠", "price": 15230.0, "smallImage": "/media/image/201810151553019280001.jpg", "bigImage": "/media/image/201810151552525570001.jpg", "gallery": [""], "category": "裝置" }, { "sn": "P489356632217096192", "title": "中華", "price": 15263.0, "smallImage": "/media/image/201810151132009110001.jpg", "bigImage": "/media/image/201810151131250240001.jpg", "gallery": ["/media/image/201810151132009110001.jpg", "/media/image/201810151131250240001.jpg"], "category": "裝置" }, { "sn": "P489356632698179584", "title": "空調清洗機", "price": 15230.0, "smallImage": null, "bigImage": "/media/image/201810151552525570001.jpg", "gallery": null, "category": "裝置" }, { "sn": "P489356632871784448", "title": "MOTO檢測儀", "price": 15320.0, "smallImage": "/media/image/201810151131250240001.jpg", "bigImage": "/media/image/201810151131250240001.jpg", "gallery": null, "category": "裝置" }] }
5.登入微信公眾平臺(點選即可)
在最下面找到基本配置功能
點選修改配置
以下是java後臺程式碼
/**
signature:微信加密簽名
echostr:隨機字串
timestamp:時間戳
nonce:隨機數
只有在驗證URL的時候查詢字串中才會有“echostr”這個欄位,驗證的方法是
將token、timestamp、nonce三個引數進行字典序排序
將三個引數字串拼接成一個字串進行sha1加密
開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
*/
import com.aui.stock.util.json.FastJsonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.util.Arrays;
/**
* @date: 2018/11/2 11:33
* @author: YINLELE
* @description:用於內網穿透給微信驗證用的
*/
@Controller
@RequestMapping("/mini")
public class MiniWxController {
Logger logger = LoggerFactory.getLogger(MiniWxController.class);
@GetMapping("")
public void doGet(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = null;
try {
out = response.getWriter();
if (chkJoinUp("***",//這裡替換成你在公眾平臺的token就可以
request.getParameter("signature"),
request.getParameter("timestamp"),
request.getParameter("nonce"))) {
out.write(request.getParameter("echostr"));
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
out.close();
}
}
/**
* 公眾號接入資料的驗證
*/
public Boolean chkJoinUp(String token, String signature, String timestamp, String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
logger.info("chkJoinUp={}", FastJsonUtil.toJson(arr));
Arrays.sort(arr);
StringBuffer content = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
String temp = encodeSHA1(content.toString());
return temp.equals(signature);
}
private static String encodeSHA1(String content) {
if (content == null || content.length() == 0) {
return null;
}
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'};
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(content.getBytes("UTF-8"));
byte[] md = mdTemp.digest();
int j = md.length;
char buf[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (Exception e) {
return null;
}
}
}
以上是我操作所記錄的,也許和你的做法大不相同,所以請多擔待,抱歉
6.還需要去小程式平臺認證伺服器 點選即可(重點否則會報錯)