1. 程式人生 > >微信開發=====>內網穿透=====>使用java後臺流程

微信開發=====>內網穿透=====>使用java後臺流程

 

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.還需要去小程式平臺認證伺服器 點選即可(重點否則會報錯)