最近要做微信的公眾號開發,公司給了一個任務叫我在網頁里面如果在微信分享的時候顯示縮略圖和描述,然后我上網查資料,通過access_token獲得了ticket,然后就不知道是不是我獲得時間戳和隨機字串的方法不對,網頁用微信打開的時候經常是errmsg : invalid signature ,下面是我的wx.config,不知道是什么問題,而且我通過微信給的實體代碼生成的nonceStr為什么跟示范檔案的不一樣??我生成的是:31ad9a10-4581-48d8-bffd-fd113bc5b60f 而官方檔案的好像長度跟很多地方都不一樣 官方的是示范代碼是:Wm3WZYTPz0wzccnW 這樣的,我該如何通過timestamp和隨機字串生成簽名??
下面是生成簽名的JAVA代碼:是官方的示范代碼,我替換掉了 jsapi_ticket 成我自己的,然后URL 是我的專案地址,通過微信的服務器除錯獲得的外部URL,我是直接右鍵run JAVAapplication生成的,不知道哪里有錯誤,求大神指點指點!
這是通過run JAVAapplication生成的簽名和字串時間戳等引數,跟檔案中的示范不一樣:
signature, d07438b2baf4af91d025f75b7f7dfdeacd39c043
jsapi_ticket, kgt8ON7yVITDhtdwci0qeQsc9UPtToeuNRefrM40_oY6KJntPRrs_yuKp1nPo7l03iFac0wQYOq9LD9-qaXp1w
url, http://x5oddnhhiq.proxy.qqbrowser.cc/Demo?params=value
nonceStr, 5933fe46-67c9-4a62-bec6-86567243a2f6
timestamp, 1472870800
這是代碼:
import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;
class Sign {
public static void main(String[] args) {
String jsapi_ticket = "kgt8ON7yVITDhtdwci0qeQsc9UPtToeuNRefrM40_oY6KJntPRrs_yuKp1nPo7l03iFac0wQYOq9LD9-qaXp1w";
// 注意 URL 一定要動態獲取,不能 hardcode
String url = "http://x5oddnhhiq.proxy.qqbrowser.cc/Demo?params=value";;
Map<String, String> ret = sign(jsapi_ticket, url);
for (Map.Entry entry : ret.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
};
public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意這里引數名必須全部小寫,且必須有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
這是寫在JSP頁面的JS代碼里面的wx.config,如果用微信的內置瀏覽器打開就會彈窗errmsg : invalid signature ,求大家了!!做不出來要滾蛋啊......
wx.config({
debug: true, // 開啟除錯模式,呼叫的所有api的回傳值會在客戶端alert出來,若要查看傳入的引數,可以在pc端打開,引數資訊會通過log打出,僅在pc端時才會列印。
appId: 'wx376f4aa02d47e3de', // 必填,公眾號的唯一標識
timestamp:'1472870800' , // 必填,生成簽名的時間戳
nonceStr: '5933fe46-67c9-4a62-bec6-86567243a2f6', // 必填,生成簽名的隨機串
signature: 'd07438b2baf4af91d025f75b7f7dfdeacd39c043', // 必填,簽名
jsApiList: ['onMenuShareAppMessage',
'onMenuShareTimeline'
] // 必填,需要使用的JS介面串列
});
uj5u.com熱心網友回復:
沒人嗎?各位大神還沒起床嗎?uj5u.com熱心網友回復:
我用這個挺方便的http://lianjie.mm2018.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/47316.html
標籤:微信開發
上一篇:有關于Android模擬定位
