C# 點選按鈕分享公眾號給好友
阿新 • • 發佈:2021-08-02
最近客戶提了個需求,在移動端首頁加一個按鈕,點選按鈕實現分享給好友。
啥也沒說,先看了一篇微信開發文件:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
接著配置了微信公眾號開發平臺域名和黑白名單,引用微信js:http://res.wx.qq.com/open/js/jweixin-1.6.0.js,獲取引數,呼叫wx介面。
前端程式碼:
//分享公眾號 function wx_fx() { wx.config({ debug: true, // 是否開啟除錯模式 appId: "{$:#.appid}", timestamp: '{$:#.timestamp}', //時間戳 nonceStr: '{$:#.nonceStr}', // 隨機字串 signature: "{$:#.signature}",//簽名 jsApiList: [ 'onMenuShareAppMessage' ] // 需要使用的JS介面列表 }) wx.ready(function(){ //分享給朋友 wx.onMenuShareAppMessage({ title:'分享測試', // 分享標題 desc:'測試分享', // 分享描述 link: 'http://xxxx.com', // 分享連結 imgUrl: 'http://xxxx.com/templets/mobile/images/index_101.png', // 分享圖示 type:'link', // 分享型別,music、video或link,不填預設為link dataUrl:'', // 如果type是music或video,則要提供資料鏈接,預設為空 success: function () { // 使用者確認分享後執行的回撥函式 alert('分享成功'); }, cancel: function () { // 使用者取消分享後執行的回撥函式 alert('取消了分享'); } }); }); } </script>
後臺第一步:根據Appid和祕鑰appSecret獲取ticket令牌
//獲取ticket public string getJsApiTicket(string appid, string appSecret) { string ticket = string.Empty; if (!string.IsNullOrEmpty(appid) && !string.IsNullOrEmpty(appSecret)) { //這裡開始從微信API獲取ticket string token = GetToken(appid, appSecret); string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token=" + token + ""; Jsapi api = JsonConvert.DeserializeObject<Jsapi>(httpGet(url)); //FsLog.CreateLog("api:" + api, true); ticket = api.ticket; //FsLog.CreateLog("api.ticket:" + api.ticket, true); } return ticket; } // 獲取access_token public string GetToken(string appid, string secret) { string strJson = RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret), "post"); return GetJsonValue(strJson, "access_token"); }
第二步:生成時間戳獲取隨機字串
// 返回時間戳 string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now)); // 返回建立隨機字串 string nonceStr = createNonceStr(); //建立隨機字串 public string createNonceStr() { int length = 16; string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; string str = ""; Random rad = new Random(); for (int i = 0; i < length; i++) { str += chars.Substring(rad.Next(0, chars.Length - 1), 1); } return str; }
第三步:獲取簽名signature,可以寫錯誤日誌在ftp上檢視問題,微信js介面簽名效驗:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
// 返回簽名signature string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + pathurl + ""; string signature = SHA1_Hash(rawstring); public string SHA1_Hash(string str_sha1_in) { SHA1 sha1 = new SHA1CryptoServiceProvider(); byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str_sha1_in); byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in); string str_sha1_out = BitConverter.ToString(bytes_sha1_out); str_sha1_out = str_sha1_out.Replace("-", "").ToLower(); return str_sha1_out; }
public string Keyword(string Appid, string appSecret) { string json = ""; if (!string.IsNullOrEmpty(Appid)&&!string.IsNullOrEmpty(appSecret)) { //獲取ticket string jsapiTicket = getJsApiTicket(Appid, appSecret); //FsLog.CreateLog("jsapiTicket:" + jsapiTicket, true); // 返回時間戳 string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now)); //FsLog.CreateLog("timestamp:" + timestamp, true); // 返回建立隨機字串 string nonceStr = createNonceStr(); //FsLog.CreateLog("nonceStr:" + nonceStr, true); // 返回簽名signature string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + pathurl + ""; string signature = SHA1_Hash(rawstring); //FsLog.CreateLog("signature:" + signature, true); json = timestamp + "," + nonceStr + "," + signature + "," + jsapiTicket; } return json; }
祝各位能用著開心