1. 程式人生 > >手機wap端開發微信繫結第三方登陸功能

手機wap端開發微信繫結第三方登陸功能

1.申請一個“微信公眾平臺服務號”;

2.開發者模式 - 配置伺服器(微信公眾平臺裡面的配置)


我們需要配置三個值:伺服器地址(接收訊息的地址)、自定義token、訊息加密方式(可選擇明文或者密文),暫時地址只支援80埠,其他埠接收不到訊息哦。
在開發者首次提交驗證申請時,微信伺服器將傳送GET請求到填寫的URL上,並且帶上四個引數signature、timestamp、nonce、echostr(開發者配置的token與timestamp與nonce字典排序後進行sha1加密後的字串簽名、時間戳、隨機數、隨機字串),開發者通過對簽名(即signature)的效驗,來判斷此條訊息的真實性。此後,每次開發者接收使用者訊息的時候,微信也都會帶上這四個引數訪問開發者設定的URL,開發者依然通過對簽名的效驗判斷此條訊息的真實性。效驗方式與首次提交驗證申請一致。
get請求校驗請求是否來自微信的方法是:
a. 將token、timestamp、nonce三個引數進行字典排序
b. 將三個引數字串拼接成一個字串進行sha1加密
c. 開發者獲得加密後的字串可與signature對比,若相等,原樣返回echostr給微信,若不等,此次請求非微信請求,什麼也不做。

java後臺配置伺服器的程式碼如下:

“`
public class CheckUtil {
// 與介面配置資訊中的Token要一致
private static String token = “*******”;
/*驗證簽名 /
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
// 將token、timestamp、nonce三個引數進行字典序排序
// Arrays.sort(arr);
sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
String tmpStr = null;
try {
MessageDigest md = MessageDigest.getInstance(“SHA-1”);
// 將三個引數字串拼接成一個字串進行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 將sha1加密後的字串可與signature對比,標識該請求來源於微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}

    /**
     * 將位元組陣列轉換為十六進位制字串
     */
    private static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for (int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    /**
     * 將位元組轉換為十六進位制字串
     */
    private static String byteToHexStr(byte mByte) {
        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];
        String s = new String(tempArr);
        return s;
    }
    public static void sort(String a[]) {
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = i + 1; j < a.length; j++) {
                if (a[j].compareTo(a[i]) < 0) {
                    String temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }

    }

`/**
* 微信公眾平臺,基本配置 - 伺服器配置 呼叫
*/
@Controller
@RequestMapping(“/wechat”)
public class wechat {
//微信訊息接收和token驗證
@RequestMapping(value=”/ownerCheck”,method = RequestMethod.GET)
public void ownerCheck(HttpServletRequest request, HttpServletResponse response) throws IOException {
boolean isGet = request.getMethod().toLowerCase().equals(“get”);
PrintWriter print;
if (isGet) {
// 微信加密簽名
String signature = request.getParameter(“signature”);
// 時間戳
String timestamp = request.getParameter(“timestamp”);
// 隨機數
String nonce = request.getParameter(“nonce”);
// 隨機字串
String echostr = request.getParameter(“echostr”);
// 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗
if (signature != null && CheckUtil.checkSignature(signature, timestamp, nonce)) {
try {
print = response.getWriter();
print.write(echostr);
print.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.伺服器配置完成之後介面

4.申請一個微信”開放平臺”賬號;

5.在微信“開放平臺”繫結“公眾平臺服務號”

每個使用者針對每個公眾號會產生一個安全的OpenID,如果需要在多公眾號、移動應用之間做使用者共通,則需前往微信開放平臺,將這些公眾號和應用繫結到一個開放平臺賬號下,繫結後,一個使用者雖然對多個公眾號和應用有多個不同的OpenID,但他對所有這些同一開放平臺賬號下的公眾號和應用,只有一個UnionID,可以在使用者管理-獲取使用者基本資訊(UnionID機制)文件瞭解詳情
6.設定公眾號-網頁授權域名
設定網頁授權

【注: 如果是自己電腦的內網,可以申請一個花生殼賬號,繫結一個域名,內網穿透:

埠必須是80埠】

將檔案MP_verify_N8no8dpNO9n7wuBZ.txt(點選下載)上傳至填寫域名或路徑指向的web伺服器(或虛擬主機)的目錄(若填寫域名,將檔案放置在域名根目錄下,例如wx.qq.com/MP_verify_N8no8dpNO9n7wuBZ.txt;若填寫路徑,將檔案放置在路徑目錄下,例如wx.qq.com/mp/MP_verify_N8no8dpNO9n7wuBZ.txt),並確保可以訪問。

然後我上傳到tomcat 下的webapp下.txt檔案在專案下的路徑:
在h5-web.xml裡面配置,配置這句之後,靜態資源直接訪問

7.以上外部環境配置完成之後
“` 前端頁面判定
window.onload=function(){
if(is_weixin()){
// 是微信,跳轉微信登陸
(“#weixinLogin”).click(function () {  
                window.location.href=’
{rc.contextPath}/h5/weixin/login/index.html’;
});
}else{
//跳轉到微信瀏覽器
$(“#weixinLogin”).click(function () {
window.location.href=’http://weixin.qq.com/r/ykzexmzEPzFArSil9xnY‘;
});
}
}