微信服务号中做运营活动,需要把页面分享到朋友圈,或者转发用户。这个功能很普遍,在写的时候有几个问题需要注意,在此记录,方便新接触的同学有个参考。
首先,如果之前没有接触过这个接口,还是要看下官方文档,有个基础的印象,链接如下:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN
接下来,可以自己试一下,如果还是有点问题,比如wx.config一直出现invalid signature,可以来参考下我的写法。
基本的方法就是js调用微信的wx.config().以及在config参数正确的时候调用相关的onMenuShareTimeline,onMenuShareAppMessage 也就是分享给朋友,分享给朋友圈。invalid signature问题可以先在微信 JS 接口签名校验工具上http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign把各个参数录入进去,看看是否正确。如果正确,还报错,就说明你的url多半是错了,对此我的做法是在页面上把当前request传到后端,解析出当前的全路径url,然后再来生成signature,简单粗暴,挺有效的
我的前端页面是用velocity写的,通过springmvc来调用,页面调用以及js的写法如下
#set($weiMap=$!dataTag.getWeiMap($request,$!code))
<input type="hidden" id="shareUrl" name="shareUrl" value='https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb7bd46a3ecfe69bb&redirect_uri=$!appTag.getAppUrl()/operate/operationShare.htm?id=$!userId&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect'/>
<input type="hidden" id="appId" name="appId" value='$weiMap.get("appId")'/>
<input type="hidden" id="timestamp" name="timestamp" value='$weiMap.get("timestamp")'/>
<input type="hidden" id="nonceStr" name="nonceStr" value='$weiMap.get("nonceStr")'/>
<input type="hidden" id="signature" name="signature" value='$weiMap.get("signature")'/>
<input type="hidden" id="position" name="position" value='$!position'/>
<input type="hidden" id="url" name="url" value='$weiMap.get("url")'/>
<script src="$!appTag.getWebUrl()/js/sea.js" data-main="$!appTag.getWebUrl()/js/page/share_friend" data-config="$!appTag.getWebUrl()/js/config" type="text/javascript"></script>
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
wx.config({
appId: $("#appId").val(),
timestamp: $("#timestamp").val(),
nonceStr: $("#nonceStr").val(),
signature: $("#signature").val(),
jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage']
});
wx.ready(function(){
wx.onMenuShareAppMessage({
title: '“sidda杯”刷牙pk赛,迪士尼门票免费送!快来给我点赞助力,我要去迪士尼!',
desc: '我当前排名第'+$("#position").val()+'位,快来点赞帮我投票吧亲!我要去迪士尼',
link: $("#shareUrl").val(),
imgUrl: 'http://mengya-web.oss-cn-hangzhou.aliyuncs.com/20160815142840.jpg',
});
wx.onMenuShareTimeline({
title: '“sidda杯”刷牙pk赛,迪士尼门票免费送!快来给我点赞助力,我要去迪士尼!',
link: $("#shareUrl").val(),
imgUrl: 'http://mengya-web.oss-cn-hangzhou.aliyuncs.com/20160815142840.jpg',
});
});
</script>
我用set在页面注入了后端的方法调用$weiMap=$!dataTag.getWeiMap($request,$!code),主要用来生成weiMap这样一个对象,来给wx.config配置相应的微信验证参数
在java中生成weiMap的参数是这样写的
public Map<String, String> getWeiMap(HttpServletRequest request,String code) {
String jsapi_ticket = weixinService.getJsapiTicket();
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
String url = getUrl(request);
// 注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str
+ "×tamp=" + timestamp + "&url=" + url;
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("appId", weixinService.getAppId());
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
return ret;
}
public String getUrl(HttpServletRequest request){
StringBuffer url=request.getRequestURL();
if(StringUtils.isNotBlank(request.getQueryString())){
url.append("?"+request.getQueryString());
}
return url.toString();
}
其中getJsapiTicket这个方法主要是通过https的方式调用微信接口,我用redis缓存做了记录,代码如下,设计到https的请求实现,以及reids对应的key我就不贴出来了,大家应该有自己的方法来实现
public String getJsapiTicket() {
String vresult = redisService.getRedis(null,
Constant.RedisKeyEnum.WEIJSTICKET);
if (StringUtils.isNotBlank(vresult)) {
return vresult;
}
String url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+getToken()+"&type=jsapi";
String params = null;
try {
String result = Https.doPost(url, params, "UTF-8", 604800, 604800);
JSONObject jo = JSONObject.parseObject(result);
String ticket=jo.get("ticket").toString();
redisService.insertRedis(null, Constant.RedisKeyEnum.WEIJSTICKET, ticket,
60);
return ticket;
} catch (Exception e) {
weixinServiceLogger.error("获取微信jsticket出错 ", e);
e.printStackTrace();
return null;
}
}
注意jsticket这个方法调用微信是有次数限制的,所以大家最好缓存起来
后端的public Map<String, String> getWeiMap(HttpServletRequest request,String code)这个方法主要是用到veloctiy的toolbox这个东西来连接前后端调用的,另外对与request的调用也要在springmvc的配置veloctiy中的ViewResolver中放开,配置如下
<!-- 配置视图的显示 -->
<bean id="ViewResolver" class="com.healthy.business.velocity.resolver.FixedVelocityLayoutViewResolver">
<property name="order" value="10" />
<property name="suffix" value=".vm" />
<property name="prefix" value="screen" />
<property name="layoutUrl" value="layout/default.vm"/>
<property name="exposeSpringMacroHelpers" value="true" />
<property name="dateToolAttribute" value="dateTool" />
<property name="numberToolAttribute" value="numberTool" />
<property name="toolboxConfigLocation" value="WEB-INF/conf/vm-toolbox.xml" />
<property name="contentType" value="${web.contentType}"></property>
<property name="templateEncoding" value="UTF-8"></property>
<property name="exposeRequestAttributes" value="true"></property>
<property name="exposeSessionAttributes" value="true" />
<property name="allowSessionOverride" value="true" />
</bean>
注意dateToolAttribute,toolboxConfigLocation,exposeRequestAttributes这些配置
分享到:
相关推荐
微信公众号接口调用 java demo, maven工程, 包含获得微信 AccessToken, 获得微信用户信息, 微信公众号用于调用微信JS接口的临时票据, 微信分享, 发送模板消息等
主要为大家详细介绍了js微信分享接口调用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在微信分享接口的实现过程中,开发者首先需要注册并获取微信开放平台的AppID和AppSecret,这两个参数是所有微信接口调用的基础。然后,开发者需要在自己的应用中实现OAuth2.0授权流程,引导用户通过微信客户端进行...
微信公众平台接口调用(java版);用来向普通用户传送信息;servlet中用到的map工具
主要介绍了微信端html5页面调用分享接口示例的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
* 4、新的分享接口,包含朋友圈、好友、微博的分享(for iOS) * 5、隐藏/显示右上角的菜单入口 * 6、隐藏/显示底部浏览器工具栏 * 7、获取当前的网络状态 * 8、调起微信客户端的图片播放组件 * 9、关闭公众...
这些信息是进行微信分享接口调用的关键。 - **调用接口**:在代码中,你可以通过Appcan提供的API调用微信分享插件。具体的调用方式通常包括初始化、设置分享内容和触发分享等步骤。虽然描述中提到接口调用不详述,...
微信JSSDK接口调用 分享到朋友圈实例,分享给朋友,给分享的内容添加标题,内容,图片等自定义。利用官方的dll快速简单的代码,内有例子和官网封装好的dll Senparc.Weixin.dll Senparc.Weixin.MP.dll
后台服务器可以调用微信的接口与微信用户进行讯息的通信,这样的行为就是在调用微信的接口,这些接口是基础接口,你不需要任何付费行为或者身份认证行为就可以调用。但是有一些高级接口,你的微信公众号必须达到一定...
使用ajax+ashx配置微信jssdk,调用分享接口,微信扫一扫接口示例
本文将详细解析“微信分享后端接口”的实现,并探讨与之相关的技术知识点,包括微信分享、微信API的使用、IO流处理以及线程锁。 首先,微信分享是指通过微信平台将应用程序内的内容(如文章、图片、链接等)分享到...
微信接口调用是移动应用开发中的一个重要环节,尤其是在中国,微信作为一款全民级的应用,它的API接口被广泛用于实现各种功能,如分享、支付、登录等。本DEMO是针对Android平台,帮助开发者理解并实践如何在自己的...
分享接口调用后,微信会回调你的处理类,告诉你分享是否成功。根据返回的结果,你可以给出相应的反馈给用户,如显示成功提示或错误信息。 7. **授权与登录**: 如果需要获取微信用户的个人信息,你还需要实现微信...
在调试过程中,确保你的设备已安装微信,并开启开发者模式,以便在真机上测试接口调用。 8. **其他辅助工具** "OrangeUI_IOS9Fix.exe" 可能是一个针对 iOS 9 的修复工具,用于解决特定版本操作系统上的兼容性问题...
本文将详细解析基于.NET实现微信分享的示例,包括关键的类、接口以及前端调用的流程。 首先,我们来看标题中的"基于.Net的微信分享示例",这通常指的是使用C#语言和.NET Framework或.NET Core框架,通过微信开放...
SDK(Software Development Kit)是微信提供的一套开发工具包,包含了各种接口调用的库文件、头文件以及示例代码,帮助开发者轻松集成微信功能。集成SDK通常包括添加库文件到项目、配置依赖项和链接器设置等步骤。 ...
2. 在分享的页面中引入JS文件,例如`wxShare.js`,这个文件包含了对微信分享接口的调用和配置。 3. 在`wxShare.js`中,配置微信信息。这包括设置`debug`模式,填入`appId`、`timestamp`、`nonceStr`、`signature`...
微信支付接口是由腾讯公司提供的在线支付解决方案,允许商家通过API调用在自己的应用或网站上集成微信支付功能。主要接口包括:订单创建、支付确认、退款处理、交易查询等,以确保支付过程的安全性和便捷性。 2. *...