您的位置:首页 > 移动开发 > 微信开发

微信分享操作JSSDK

2016-05-09 11:00 453 查看
使用jssdk域名要绑定吗?

jssdk必须绑定域名才能使用,绑定根域后,子域无需再做绑定即可正常使用jssdk。切记微信公众号绑定的是一级或二级域名。而且要与Config的url域名一致。
使用jssdk如何在本地做测试?

可临时绑定一个域名,比如:a.com,在本地的host文件中设置192.168.0.0. a.com,访问a.com进行开发测试,本地开发完成后再做迁移调整。
使用js widget没有响应?

请检查appkey是否与域名绑定并且是否审核通过。
jssdk无法授权?

这种情况一般弹出的授权窗口被浏览器拦截导致,将授权页添加信任站点即可。
在mobile里如何使用jssdk?

由于jssdk授权是使用的弹出窗口,而目前有些移动终端是不支持弹窗的,故而无法通过正常流程进行授权。 可通过自行进行授权得到access_token后,调用jssdk中的WB2.init(‘access_token’ : access_token);后,再进行使用parseCMD或js widget。

*生成签名错误?(一般出错都在这里) 错误提示:invalid signature

1,、确认签名算法正确

2、确认config中noncestr,timestamp与用以签名中的对应noncestr,timestamp一致

3、确认url是页面完整的url,包括Get参数部分

4、确认config中的appid与用来获取jsapi_ticket的appid一致

5、确保一定缓存access-token和jsapi_ticket

特别注意:你在利用参数生成签名的时候,要对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串 string1。这里需要注意的是所有参数名均为小写字符。

Code

直接取的Config

#region   //微信分享数据++GetConfig(string appid ,string AppSecret,string url)

public  string Get_Config(string appid, string token, string url)
{
string wx_config = "";
try
{
//string ACCESS_TOKEN = thisACCESS_TOKEN(appid, appsecret);
string JSAPI_TICKET = thisJSAPI_TICKET(token);
SHA1 sha = new SHA1CryptoServiceProvider();
string string1 = "jsapi_ticket=" + JSAPI_TICKET + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + (url.IndexOf('#') >= 0 ? url.Substring(0, url.IndexOf('#')) : url);
#region +++--------------------------------------生成签名
SHA1 shatwo = SHA1.Create();
ASCIIEncoding encode = new ASCIIEncoding();
byte[] by = encode.GetBytes(string1);
shatwo.ComputeHash(by);
string result = System.BitConverter.ToString(shatwo.Hash).Replace("-", "");
#endregion

wx_config = "wx.config({" +
"debug: false," + // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
"appId: '" + appid + "'," + // 必填,公众号的唯一标识
"timestamp:" + timestamp + "," + // 必填,生成签名的时间戳
"nonceStr: '" + noncestr + "'," + // 必填,生成签名的随机串
"signature: '" + result + "'," +// 必填,签名,见附录1
@" jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onRecordEnd',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode',
'chooseWXPay',
'openProductSpecificView',
'addCard',
'chooseCard',
'openCard'
]
" + // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
"});";
return wx_config;
}
catch (Exception)
{

throw;
}
}

#region ..._+++方法

/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="Length">生成长度</param>
/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
/// <returns></returns>
public static string Str(int Length, bool Sleep)
{
if (Sleep)
System.Threading.Thread.Sleep(3);
char[] Pattern = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
string result = "";
int n = Pattern.Length;
System.Random random = new System.Random(~unchecked((int)System.DateTime.Now.Ticks));
for (int i = 0; i < Length; i++)
{
int rnd = random.Next(0, n);
result += Pattern[rnd];
}
return result;
}
public static string thisACCESS_TOKEN(string AppID, string AppSecret)
{

WebClient myWebClient = new WebClient();
byte[] myDataBuffer = myWebClient.DownloadData("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppID + "&secret=" + AppSecret);
string json = Encoding.UTF8.GetString(myDataBuffer);
JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
ACCESS_TOKEN_Json list = js.Deserialize<ACCESS_TOKEN_Json>(json);    //将json数据转化为对象类型并赋值给list

string ACCESS_TOKEN = list.access_token;
return ACCESS_TOKEN;
}

/// <summary>
/// 当前Weixin  JSAPI_TICKET
/// </summary>
public static string thisJSAPI_TICKET(string ACCESS_TOKEN)
{

WebClient myWebClient = new WebClient();
byte[] myDataBuffer = myWebClient.DownloadData("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + ACCESS_TOKEN + "&type=jsapi");
string json = Encoding.UTF8.GetString(myDataBuffer);
JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
JSAPI_TICKET_Json list = js.Deserialize<JSAPI_TICKET_Json>(json);    //将json数据转化为对象类型并赋值给list

string JSAPI_TICKET = list.ticket;
return JSAPI_TICKET;
}

/// <summary>
/// 获取授权的ACCESS_TOKEN
/// </summary>
public struct ACCESS_TOKEN_Json
{
public string access_token { get; set; }
}
/// 获取授权的JSAPI_TICKET
/// </summary>
public struct JSAPI_TICKET_Json
{
public string ticket { get; set; }
}
#endregion
#endregion


页面HTML

<%= wx_config %>
wx.ready(function(){
wx.showOptionMenu();
var dataForWeixin = {
imgUrl: "img/start.png",
link: "<%= Link %>" , //此Link一定是要截取的Linq不然会带openid
title:"分享数据,收获豪礼!",
desc: "我已成功参与了分享,如果你也想get百丽宫、SKII、各大餐厅……送出的礼物,点击进入游戏抢购属于自己的礼品!"
};

//分享朋友圈
wx.onMenuShareTimeline({
title: dataForWeixin.title, // 分享标题
link: dataForWeixin.link, // 分享链接
imgUrl: dataForWeixin.imgUrl, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数

$.ajax({
url: "lhjAct.ashx",
dataType: "json",
data: {
openid: openid,
myact: "updateshare",
aid: aid,
rad: Math.random()
},
success: function (data) {
if(data.share>0){
$("#mcover").show();
share-=1;
$("#pshare").html("亲,你需要分享"+share+"次才能激活领取奖品权限!")
}else
{
$("#mcover").hide();
}

}
});

},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});

//分享给朋友
wx.onMenuShareAppMessage( {
title: dataForWeixin.title, // 分享标题
link: dataForWeixin.link, // 分享链接
imgUrl: dataForWeixin.imgUrl, // 分享图标
desc: dataForWeixin.desc, // 分享描述
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
$.ajax({
url: "lhjAct.ashx",
dataType: "json",
data: {
openid: openid,
myact: "updateshare",
aid: aid,
rad: Math.random()
},
success: function (data) {
if(data.share>0){
$("#mcover").show();
share-=1;
$("#pshare").html("亲,你需要分享"+share+"次才能激活领取奖品权限!")
//                       location.reload();
}else
{
$("#mcover").hide();
}

}
});

},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});


对了别忘了引用JS文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: