微信二次分享

Q: 使用微信二次分享的时候,标题被截短,描述也变成了链接,图片也没有

solution

文档说明

  1. 微信JS-SDK说明文档
  2. JS-SDK使用步骤

    2.1 绑定域名

    登录微信公众平台进入“公众号设置”-->>“功能设置”-->>“JS接口安全域名”,按照提示进行填写。

    前端

    2.2 引入js文件

    在需要调用JS接口的页面引入如下JS文件,http://res.wx.qq.com/open/js/jweixin-1.2.0.js

    2.3 通过config接口注入权限验证配置

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: ‘‘, // 必填,公众号的唯一标识
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: ‘‘, // 必填,生成签名的随机串
        signature: ‘‘,// 必填,签名,见附录1
        jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });

    2.4 通过ready接口处理成功验证

    wx.ready(function(){
    
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,  config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });

    2.5 通过error接口处理失败验证

    wx.error(function(res){
    
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    
    });

    分享接口

    获取“分享到朋友圈”按钮点击状态及自定义分享内容接口

    wx.onMenuShareTimeline({
        title: ‘‘, // 分享标题
        link: ‘‘, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: ‘‘, // 分享图标
        success: function () {
        // 用户确认分享后执行的回调函数
    },

    获取“分享给朋友”按钮点击状态及自定义分享内容接口

    wx.onMenuShareAppMessage({
        title: ‘‘, // 分享标题
        desc: ‘‘, // 分享描述
        link: ‘‘, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: ‘‘, // 分享图标
        type: ‘‘, // 分享类型,music、video或link,不填默认为link
        dataUrl: ‘‘, // 如果type是music或video,则要提供数据链接,默认为空
        success: function () {
            // 用户确认分享后执行的回调函数
        },
    });

    后端

    1. 获取access_token接口调用凭据。 获取access_token

      开发者需要全局缓存access_token

    2. 用第一步获取access_token获取(get)jsapi_ticket https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

      开发者需要全局缓存jsapi_ticket

      response json示例:

      {
      "errcode":0,
      "errmsg":"ok",
      "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
      "expires_in":7200
      }
    3. 获取签名

      签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

      步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串

      步骤2. 对string1进行sha1签名,得到signature:

    注意事项:

    1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。

    2.签名用的url必须是调用JS接口页面的完整URL。

    3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。

常见错误及解决方法

invalid url domain

当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,仅支持80(http)和443(https)两个端口,因此不需要填写端口号(一个appid可以绑定三个有效域名。)。

invalid signature(建议按顺序验证)

1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign页面工具进行校验。

2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

3.确认url是页面完整的url(请在当前页面alert(location.href.split(‘#‘)[0])确认),包括‘http(s)://‘部分,以及‘?‘后面的GET参数部分,但不包括‘#‘hash后面的部分。

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

5.确保一定缓存access_token和jsapi_ticket。

6.确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去‘#‘hash部分的链接(可用location.href.split(‘#‘)[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

代码示例

后端(python)


import time
import random
import string
import hashlib

nonce_str = ‘‘.join(random.choice(string.ascii_letters + string.digits) for _ in range(15))

timestamp = int(time.time())

jsapi_ticket = ""  # 用access_token获取
url = ""  # 当前请求页面的url,url是动态获取的

ret = {
    "nonceStr": nonce_str,
    "jsapi_ticket": jsapi_ticket,
    "timestamp": timestamp,
    "url": url
}

string_ = ‘&‘.join([‘%s=%s‘ % (key.lower(), ret[key]) for key in sorted(ret)])

ret[‘signature‘] = hashlib.sha1(string).hexdigest()

return ret

前端

<!DOCTYPE html>
<html>
<head>
    <!--这个js必须引入-->
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
</head>
<body>
<script type="text/javascript">
    wx.config({
        //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: ‘‘, // 必填,公众号的唯一标识
        timestamp: "", // 必填,生成签名的时间戳
        nonceStr: ‘‘, // 必填,生成签名的随机串
        signature: ‘‘,// 必填,签名,
        jsApiList: [‘onMenuShareTimeline‘,‘onMenuShareAppMessage‘,‘onMenuShareQQ‘,‘onMenuShareWeibo‘,‘onMenuShareQZone‘] // 必填,需要使用的JS接口列表
    });
    wx.ready(function(){
        wx.onMenuShareTimeline({//分享到朋友圈
            title: ‘‘, // 分享标题
            link: ‘‘, // 分享链接
            imgUrl: ‘‘ // 分享图标
        });
        wx.onMenuShareAppMessage({//分享给朋友
            title: ‘‘, // 分享标题
            desc: ‘‘, // 分享描述
            link: ‘‘, // 分享链接
            imgUrl: ‘‘, // 分享图标
            type: ‘‘, // 分享类型,music、video或link,不填默认为link
            dataUrl: ‘‘, // 如果type是music或video,则要提供数据链接,默认为空
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });

</script>
<div class="wrap">

</div>
</body>
</html>

原文地址:https://www.cnblogs.com/fzw-/p/8955704.html

时间: 2024-11-24 09:20:43

微信二次分享的相关文章

关于微信二次分享,描述变链接的解决方法(一)----文档说明

http://www.cnblogs.com/joshua317/p/4761948.html 前言: 最近工作中遇到了使用微信二次分享的时候,标题被截短,描述也变成了链接,图片也没有,运营人员半夜还在嚷嚷,无奈只好硬着头皮去百度,去google,但是悲催的是没有详细的解决方法,最终只能自己去研究,还好最终搞出来了,决定分享一下,帮助需要的人.博文,分两篇,第一篇主要是微信的官方文档说明,第二篇主要是代码部分: 一.微信JS-SDK说明文档 1.概述 微信JS-SDK是微信公众平台面向网页开发者

微信二次分享不显示摘要和图片的解决方法

微信二次分享不显示摘要和图片的解决方法 解决不显示摘要和图片的问题,需要调用微信公众号的js-sdk的api ,需要前端和后台的配合, 后台需要返回 appid (公众号的appid ) . timestamp (生成签名的时间戳) .nonceStr (签名的随机字符串) . signature (签名* 可能出错): 1.绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"js接口安全域名".(特别提示不需要加上http或者h

微信二次分享功能开发笔记

最近的一个项目在进行二次分享的时候出现了问题,定制的文案描述及图片都不能在分享后出现,如图所示: 经过十八般折腾,终于变成我想要的样式了,如图:    下面讲讲具体如何实现的. 首先,明白我们的需求是使由app分享到微信后的页面可以使用微信的二次分享功能做定制化的分享(如图所示) 然后开始着手做相关功能开发. 根据微信开发文档,知晓我们需要调用微信的api,获取对应的分享功能(朋友.朋友圈.qq)等,还需要一个对应的公众号或者服务号.理清思路后,接下来介绍关于各部分的具体处理,见下: 本地代码处

微信二次分享失败

朋友圈   from=timeline&isappinstalled=0微信群   from=groupmessage&isappinstalled=0好友分享 from=singlemessage&isappinstalled=0 TX会在分享的url后加上以上的参数,在写分享url配置的时候要获取当前分享url,然后对此url进行签名验证.

微信二次分享 签名失败,很可能因为域名原因

this.myurl.url = location.href.split('?')[0];if(this.myurl.url !== window.location.href){window.location.href = this.myurl.url;} 代码为获取当前页面url,如果你的地址后面跟的?传值,就是以问号分割获取,如果你是/,或者#等,就按照当前符号分割获取,送给后台 原文地址:https://blog.51cto.com/xihan/2436181

H5页面二次分享

对于H5页面来说二次分享还是蛮重要的,毕竟qq还是微信发出去之后习惯性的使用自带的分享功能.和PC端不同,PC直接复制地址了.前两天在做请柬,踩了不少的雷,个人开发和公司开发还是不一样,各种问题,其他问题放在一个请柬的后记里面说吧.我们开始正题. 微信二次分享 微信的文档还是不错的.通篇看完的话,基本上能避过很多坑(记得微信文档习惯把一些坑写在后面,不放在一起) 先说说,怎么微信怎么做二次分享 文档地址,通过引入官方API.文档写挺好,直接传入shareInfo就得了. <script src=

PHP 微信分享(及二次分享)

js部分: <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script> var appid = appid; var timestamp = timestamp; var nonceStr = nonceStr; var signature = signature; wx.config({ debug: false, appId: appid, time

仿乐享微信源码分享,把你的生意做到微信里

99%的人不知道的微信秘密!微信里的商机.仿乐享微信源码分享,把你的生意做到微信里. WeiKuCMS  (微酷CMS)功能特点:人工客服新功能正式上线!粉丝行为分析.渠道二维码生成.二维码折扣,微菜单,微统计,会员卡签到,微会员,刮刮卡,大转盘,优惠券,积分兑换,微官网,砸金蛋,微调研,微投票,微相册,微商城,微团购,微留言,微喜帖,商家入驻,微门店,微餐饮,微酒店,微教育,微物业,微医疗,微信墙,微花店,微美容,微生活. 微信公共账号轻松接入,无限自定义图文回复.欢迎您的加入! 微酷WeiK

Android调用微信登陆、分享、支付

前言:用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也有个找资料的地方. 一.微信登陆分三个步骤: 1).微信授权登陆  2).根据授权登陆code 获取该用户token  3).根据token获取用户资料  4).接收微信的请求及返回值 如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作: a. 在你的包名相应目录