微信公众平台开发[2] —— 微信端分享功能

初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客、问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的学渣一点帮助。——
前言.

背景介绍:

今天想添加微信分享的功能,如果不进行自定义设计,那么当我们点击分享朋友圈、好友或者QQ好友、空间时,默认的标题就是<title>标签中的信息,而显示的描述信息就是链接,图片多是默认为页面中显示的第一张图片,显然这样的处理是不合理的,所以需要查询开发文档进行编码设计。

操作步骤:

一.参考微信公众号开发文档

1.登录微信公众号,打开 “开发者工具->开发者文档->微信网页开发->微信JS-SDK说明文档”,找到对应的位置,首先要了解官方的需求说明才能进行下一步的开发。

2.建议详细参考文档后再考虑代码的编写,提示:下拉上图中的网页最下端,下载官方提供的参考demo。本文的最后我会提供一份稍作修改的仅针对于php的实现代码,可作参考。

二.代码实现(PHP)及部分问题引导

1.我提供的代码就是下图中的几个简单文件,主要来源于微信公众号的开发文档,上面提到过一次。其中,我们操作的分享页面代码只需参考 sharePage.php就好,对于官方的实现可以去阅读其他文件,毕竟我们实现功能只需导入文件,调用所提供类及方法就好。

2.在此提供 sharePage.php简单代码,以便参考讲解。其中提出几点需要注意的是:

(1).需要提供$appid,$secret

(2).代码中需要引用微信端提供的js文件<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> ,当然也可以下载其源代码,放于本地链接获取就可以。

(3).保证wx.config的信息配置的正确,debug如果为true可以提示操作的过程,测试没有问题后可以改为false,这样才是合理的操作,另外jsApiList中要补全自己需要的功能

(4).之前我把分享功能的代码写在wx.config平级中无法实现,之后测试发现应该写在wx.reday(function())中,具体的代码模式都应该参考开发文档。

<span style="font-size:14px;"><?php
require_once "jssdk.php";

//获取到网页授权的access_token
$appid = "wx36xxxxxxxxxx199";//   输入公众号、服务号、或者测试号的appid
$secret = "9caxxxxxxxxxxxxxxxxxx8a2";//   输入公众号、服务号、或者测试号的 secret

$jssdk = new JSSDK($appid, $secret);
$signPackage = $jssdk->GetSignPackage();

//此处用于输出得到的数据  用来测试签名证书是否正确
/*
echo '   appId:'. $signPackage["appId"].'<br/>';
echo '   jsapi_ticket:'. $signPackage["jsapiTicket"].'<br/>';
echo '   url:'. $signPackage["url"].'<br/>';
echo '   timestamp:'. $signPackage["timestamp"].'<br/>';
echo '   nonceStr:'. $signPackage["nonceStr"].'<br/>';
echo '   signature:'. $signPackage["signature"];
echo '<br/>';
echo '<br/>';
echo '<br/>';
exit;
*/

?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  Hello Hello Hello
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
  /*
   * 注意:
   * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
   * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
   * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
   *
   * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
   * 邮箱地址:[email protected]
   * 邮件主题:【微信JS-SDK反馈】具体问题
   * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
   */
  wx.config({
        debug: true,
        appId: '<?php echo $signPackage["appId"];?>',
        timestamp: <?php echo $signPackage["timestamp"];?>,
        nonceStr: '<?php echo $signPackage["nonceStr"];?>',
        signature: '<?php echo $signPackage["signature"];?>',
        jsApiList: [
            // 所有要调用的 API 都要加到这个列表中
            'checkJsApi',
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareWeibo',
            'onMenuShareQZone',
        ]
    });

    wx.ready(function () {
        // 在这里调用 API
        //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
        wx.onMenuShareTimeline({
            title: '快来!分享朋友圈', // 分享标题
            link: 'http://www.baidu.com', // 分享链接
            imgUrl: 'http://img1.3lian.com/img013/v2/4/d/101.jpg', // 分享图标
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
        //获取“分享给朋友”按钮点击状态及自定义分享内容接口
        wx.onMenuShareAppMessage({
            title: ' 微信分享给朋友', // 分享标题
            desc: '描述一下,可是知道该咋描述你呢?', // 分享描述
            link: 'http://www.baidu.com', // 分享链接
            imgUrl: 'http://img1.3lian.com/img013/v2/4/d/101.jpg', // 分享图标
            type: 'link', // 分享类型,music、video或link,不填默认为link
            dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
        });
        wx.onMenuShareQQ({
            title: 'QQ我要跳转到百度页面了啊!', // 分享标题
            desc: '描述一下,可是知道该咋描述你呢?', // 分享描述
            link: 'http://www.baidu.com', // 分享链接
            imgUrl: 'http://img1.3lian.com/img013/v2/4/d/101.jpg', // 分享图标
        });
        wx.onMenuShareQZone({
            title: 'QZone我要跳转到百度页面了啊!', // 分享标题
            desc: '描述一下,可是知道该咋描述你呢?', // 分享描述
            link: 'http://www.baidu.com', // 分享链接
            imgUrl: 'http://img1.3lian.com/img013/v2/4/d/101.jpg', // 分享图标
        });
    });
</script>
</html>
</span>

3.正常操作中,可能会有 “errMsg config:invalid signature"签名错误,可以参考博文  《微信js
sdk invalid signature签名错误》
,网上多数的建议是检查签名证书是否正确,用作者的话就是“确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验”。

对于需要填入的信息,可以从上文中打印出需要的信息,我做注释的那一部分信息,请参考。不过,普遍情况,这样的签名是没有问题的,可作为参考。

4.我遇到过提示此处代码报错的问题,参考网上资源介绍的多是与签名安全相关的信息,可自行百度,鉴于能力有限,暂时发现注释此处的代码可避免该问题的影响,等有时间再做深入解决。

5.最后的报错信息显示该处对于文件操作的权限不足的问题,

类似Warning:
fopen(access_token.json) [function.fopen]: failed to open stream: Permission denied in jssdk.php
问题,可以参考此文的部分介绍。

值得一提的是该问题大多牵扯操作系统的权限分配,之前我用的是新浪SAE进行测试,后面得知SAE是无法由我们用户进行权限设定的,最后我选择了公司服务器,使用类似 chmod
-R 777 /home/mypackage 的命令进行对应文件的操作权限分配。

三.补充

1.出现问题,多参考别人的解决方法,可见有一个可以带你的前辈是多么重要

2.自己探索问题的解决方法,然后做好笔记作为自己的经历回顾,虽然解决时间拉长,但成就感绝对比从别人口中听来分量重的多。

>>源代码下载>>>

时间: 2024-10-11 16:23:19

微信公众平台开发[2] —— 微信端分享功能的相关文章

微信公众平台开发(102) 微信支付账号体系

本文介绍微信支付账号体系各参数. 商户在微信公众平台提交申请资料以及银行账户资料,资料审核通过并签约后,可以获得表6-4所示帐户(包含财付通的相关支付资金账户),用于公众帐号支付. 帐号 作用 appId 公众帐号身份的唯一标识.审核通过后,在微信发送的邮件中查看. appSecret 公众帐号支付请求中用于加密的密钥Key,可验证商户唯一身份,PaySignKey对应于支付场景中的appKey值.审核通过后,在微信发送的邮件中查看. paySignKey 除了支付请求需要用到paySignKe

【微信公众平台开发】封装获取天气预报功能

微信公众平台小功能多点,可以增加用户的粘性,不会感觉你微信没内容,就把你给取消关注了.所以得折腾各种有的没的东西. 个人封装天气预报功能代码如下(说明下:网上有很多此类代码,但是要自己理解,就得实际折腾) <?php header('Content-Type:text/html;charset=utf-8'); class WeChatMsgType { private $toUserName; private $fromUserName; private $xmlModle; private

微信公众平台开发(101) 微信支付URL配置

本文介绍微信支付申请时如何设置授权目录及URL. 一.选择支付类型 目前有两种支付类型 JS API网页支付 Native原生支付 如果没有特殊要求,两种都勾选. 二.支付授权目录 目前可以选择http还是https协议,没有特别要求,选择http.对安全要求比较高的企业,请选择https. 支付授权目录填写自己公司的域名加上目录,目录可以是不存在的目录,例如wxpay. 一个完整的目录参考如下: http://www.doucube.com/wxpay/ 蓝色部分表示要选择的. 红色部分表示要

【微信公众平台开发】微信刮刮乐,解决三星兼容性问题

刮刮乐jquery插件:wScratchPad 完整项目资源下载:点击打开链接 运用wScratchPad插件很快弄出刮刮乐的效果,代码如下: <!DOCTYPE html> <html> <head> <meta CHARSET="UTF-8"> <title>刮刮乐</title> <script type="text/javascript" src="./inc/jquer

【微信公众平台开发】微信幸运大转盘

需要js插件(下载包地址:http://download.csdn.net/detail/wyz365889/7798255): jquery jQueryRotate.2.2.js jquery.easing.min.js 前端显示代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name=

微信公众平台开发(六) 翻译功能开发

原文地址:http://www.cnblogs.com/mchina/p/3170565.html 一.简介 上一篇文章介绍了微信公众平台天气预报功能的开发,实现了微信公众平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开发,以供读者参考. 二.思路分析 和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译API 进行相关翻译. 三.翻译API 分析 网络上有很多翻译AP

微信公众平台开发(110) 微信连Wi-Fi

关键字:微信公众平台 微信连Wi-Fi 微信 WiFi 硬件鉴权作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-wifi.html 微信连Wi-Fi是为商家的线下场所提供一套完整和便捷的微信连Wi-Fi的方案.商家接入微信连Wi-Fi后,顾客无需输入繁琐的Wi-Fi密码,通过微信扫二维码等方式即可快速上网.微信连Wi-Fi还帮助商家打造个性化服务,如提供微信顶部常驻入口.商家主页展示.连网后公众号下发消息等.因此,微信连Wi-Fi既可以极大

微信公众平台开发(121) 微信二维码海报

关键字:微信公众平台 二维码 海报作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/weixin-poster.html 本文介绍微信公众平台下二维码海报的开发过程. 一.微信二维码海报介绍 微信二维码海报是指在海报中嵌入和微信用户关联的参数二维码的海报,用户分享推广之后,新用户可以被统计为被推广人员数,从而达到增加粉丝的传播效果.其使用场景如下:   二.开发流程 在微信二维码海报生成中,需要用到以下信息 1. 自定义菜单中设置一个菜单项,点击后返回二维

微信公众平台开发-- 关闭微信浏览器

在这篇微信公众平台开发教程中,我们将介绍如何使用微信JS接口关闭微信内置浏览器返回到微信聊天窗口界面. 微信的JS接口目前已公布了三种:右上角按钮/底部导航栏/用户网络状态,另外转发到朋友圈和分享到好友也可以使用JS接口来定义. 而关闭微信浏览器可以使用 WeixinJSBridge.call('closeWindow');" 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 &l