大家好,又见面了,我是你们的朋友全栈君。
微信朋友圈分享接口是非常细节的,而且不好调试,所以在此总结一下,以帮助大家
首先应该遵循微信开发者文档介绍,用接口调试工具将你需要的接口的权限确定一下(这里得去申请接口权限)?然后将这个网址用手机端微信打开测试一下接口是否可用?http://203.195.235.76/jssdk/
在保证所有的接口可用的前提下,下面我们正式进入主题我用的是java的struts框架写的后台
var timestamp = '<s:property value="timestamp" />';
var signature = '<s:property value="signature" />';
var inviteAddr = '<s:property value="inviteAddr"/>';
//首先我们得配置config
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: "微信公众号", // 必填,公众号的唯一标识
timestamp: timestamp, // 必填,生成签名的时间戳取当前时间
nonceStr: 'TmqtI9LIZM4uGiY6MWYBN4GnthPx1QKUEERYoqR7Rt6', // 必填,生成签名的随机串,可以随便写
signature: signature,// 必填,签名,见附录1
jsApiList: [ 'checkJsApi',
'openLocation',
'getLocation',
'onMenuShareTimeline',
'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
最重要的的就是签名,因为它联系着一下三个参数
signature = Common.setSignature(jsapi_ticket, Common.noncestr, timestamp, "http://" + url);
首先是jsapi_ticket的获取:
public static String getAccessToken(HttpServletRequest request) {
String turl = String.format(
"%s?grant_type=client_credential&appid=%s&secret=%s",
Common.appUrl, Common.appID, Common.appSecret);
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(turl);
JsonParser jsonparer = new JsonParser();
String result = null;
try {
HttpResponse res = client.execute(get);
String responseContent = null;
HttpEntity entity = res.getEntity();
responseContent = EntityUtils.toString(entity, "UTF-8");
JsonObject json = jsonparer.parse(responseContent)
.getAsJsonObject();
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
if (json.get("errcode") != null) {
} else {
result = json.get("access_token").getAsString();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
// if(null != request){
// Common.setSession(request, "access_token", result);
// }
return result;
}
}
public static String getJsapiTicket(HttpServletRequest request) {
// String access_token = Common.getAccessToken(request);
//得到AccessToken
String access_token = getAccessToken(request);
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
+ access_token + "&type=jsapi";
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
JsonParser jsonparer = new JsonParser();
String result = null;
try {
HttpResponse res = client.execute(get);
String responseContent = null;
HttpEntity entity = res.getEntity();
responseContent = EntityUtils.toString(entity, "UTF-8");
JsonObject json = jsonparer.parse(responseContent)
.getAsJsonObject();
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
if (!json.get("errcode").toString().equals("0")) {
// {"errcode":40013,"errmsg":"invalid appid"}
} else {
result = json.get("ticket").getAsString();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
return result;
}
}
//名称是小写
timestamp = String.valueOf((new Date()).getTime() / 1000);
//随机串不说了
//url获取
String url = request.getHeader("Host") + request.getRequestURI();//必须动态获取
如果签名对了,调试时就会弹出errorMsg:ok代表config正确。
后面的就简单了
在ready里面调用接口
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
// 分享到朋友圈
wx.onMenuShareTimeline({
title: '', // 分享标题
link: "点击后的地址", // 分享链接
desc: "",
imgUrl: "图片的url",
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
// alert('用户点击发送给朋友');
},
success: function (res) {
alert('已分享');
window.location.href= "red_package_index?shareFlag=1";
},
cancel: function (res) {
alert('已取消');
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
});
总结都是很细节的东西,很容易错,务必看文档,有很多错误总结。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138784.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...