微信开发-如何自定义页面分享元素

场景

微信网页分享到朋友圈及发送给朋友;

内置浏览器的做法是默认采用第一个img元素图片,使用标题作为文本;

需实现自定义

解决方案

通过jssdk实现自定义分享

参考文档

http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

服务端代码

include (‘./Lib/COM/jssdk.php‘);
$jssdk = new JSSDK($tpl[‘appid‘], $tpl[‘appsecret‘]);
$signPackage = $jssdk -> GetSignPackage();

//在Action层实现jssdk初始化参数的获取,jssdk封装了api调用的细节

public function getSignPackage() {
$jsapiTicket = $this->getJsApiTicket();

// 注意 URL 一定要动态获取,不能 hardcode.
$protocol = (!empty($_SERVER[‘HTTPS‘]) && $_SERVER[‘HTTPS‘] !== ‘off‘ || $_SERVER[‘SERVER_PORT‘] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$timestamp = time();
$nonceStr = $this->createNonceStr();

// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

$signature = sha1($string);

$signPackage = array(
"appId" => $this->appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}

  

签名流程

 

1  获取jsapi_ticket;

2  生成随机字符串及时间戳

3  拼接待签名字符串

jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url

4 生成shar1签名

前端开发

//执行配置
wx.config({
debug: true, //开发时开启调试,可获得弹出错误提示信息
appId: ‘wx2e0bde3x3fa332b‘,
timestamp: ‘1437016703‘,
nonceStr: ‘x7GInQ2pQtzF7fxt‘,
signature: ‘ef80a58a197ede439e0beb2360ef378e2b4fb204‘,
jsApiList: [
‘onMenuShareTimeline‘,
‘onMenuShareTimeline‘
]
});
//在ready方法中执行
wx.ready(function() {
//定制朋友圈分享
wx.onMenuShareTimeline({
title: ‘{维尔特}--明星讲故事‘, // 分享标题
link: ‘http://www.baidu.com‘, // 分享链接
imgUrl: ‘http://my.emplog.com/uploads/u/uxzdcn1426737865/d/2/0/6/thumb_55a4749bdac1c.jpg‘, // 分享图标
success: function() {
//分享成功
},
cancel: function() {
//分享取消
}
});
//定制发送给朋友
wx.onMenuShareAppMessage({
title: ‘{维尔特}--明星讲故事‘, // 分享标题
desc: ‘{维尔特}--明星讲故事‘, // 分享描述
link: ‘http://www.baidu.com‘, // 分享链接
imgUrl: ‘http://my.emplog.com/uploads/u/uxzdcn1426737865/d/2/0/6/thumb_55a4749bdac1c.jpg‘, // 分享图标
type: ‘‘, // 分享类型,music、video或link,不填默认为link
dataUrl: ‘‘, // 如果type是music或video,则要提供数据链接,默认为空
success: function() {

},
cancel: function() {

}
});
wx.error(function(res) {
//alert(res.errMsg);
});
})

  

常见问题

1  打开页面提示 config:error -- invalid signature

检查生成签名的正确性,尤其注意当前url的一致性,即微信jssdk以浏览器页面url进行计算,而服务端也需要以同样的url。

最常出错的场景是服务端通过nginx或apache配置了反向代理,而php通过$_SERVER[HTTP_HOST]获得的是反向代理主机的IP,于是出现错误,解决办法是:

在反向代理配置中实现HTTP_HOST的header透传,保证php可获得前端url的host信息,以nginx配置为例:

location / {
proxy_pass http://120.21.33.81:9031;
proxy_set_header Host $host;
}

  

2  页面提示错误  config:error  -- invalid domain

未设置jssdk的安全域名,打开微信公众号后台,点击右上角名称,进入功能设置:

设置安全回调域名即可

时间: 2024-10-15 02:49:24

微信开发-如何自定义页面分享元素的相关文章

微信开发-发送给朋友,分享到朋友圈开发

微信分享功能开发 用了一天时间,把微信发送给朋友和分享到朋友圈功能开发出来,在这里给大家分享一下,避免大家走弯路. 一.服务器端程序 package com.wiimedia.controller; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.ParseException; import

Java企业微信开发_04_自定义菜单

一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 这里需要格外注意的是,企业微信中请求包的数据是Json字符串格式的,而不是xml格式.关于json序列化的问题请参考上一节   Java企业微信开发_03_通讯录同步 2.创建菜单的接口 public static String create_menu_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS

php微信开发实现自定义菜单功能

首先说一下遇到的坑吧! 01我用的测试公众号,说好的有接口权限,结果呢,微信留了个坑,返回错误代码 48001 一查错误码 微信文档这样写:api功能未授权,请确认公众号已获得该接口,可以在公众平台官网-开发者中心页中查看接口权限 懵逼了吧! 半信半疑中,我果断换了认证过的服务号,一测试OK了 02代码的开头有空格也会报错,跟tp的机制有关,我的代码在tp下面. 03 调用接口的链接为https,结果我的服务器可能验证证书出错,最后找了半天才找到一种解决办法,就是在使用curl的部分使用如下代码

微信开发之自定义菜单--weixin-java-tools

一.前言 平时在开发微信的过程中,肯定会设计到微信的相关菜单的使用,这次就和大家介绍下如何使用weixin-java-tools来管理菜单 二.自定义菜单分类 1.click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互: 2.view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获

WORDPRESS开发(一)自定义页面显示分类目录

第一步:自定义一个页面,如index.php 第二步:打开index.php文件,引用wp-blog-header.php文件 require('wp-blog-header.php'); 第三步使用wp_list_categories提取分类 $args=array('title_li'=> ''); wp_list_categories($args); ‘title_li’=> ” 用于设置不显示“分类目录”标题,其它的使用默认. 显示效果如下 全部代码 <style type=&q

微信开发 之 自定义菜单

http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 这是微信公众平台上的说明地址. 另外订阅号是没有这个权限的,认证过的公众号才可以有这个权限. 接口调用请求说明 http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN { "button":[ { "

c#微信开发,使用JS-SDK自定义分享功能,分享朋友圈,分享给朋友等

如果一个后端开发掌握了微信开发,甚至有微信开发上线项目,这在换工作的时候 还是有竞争力的. 微信开发的资料很多,但是用asp.net c#进行微信开发好像比较少,或者资料不够完整. 使用JS-SDK自定义分享功能,分享朋友圈,分享给朋友,这里基本上不涉及后端语言. 1.首先要绑定域名,当然域名得备案. 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 说明:设置此安全域名目的是为了当发现此公众平台发现诱导分享行为时,可以根据此域名追溯到所有分享出去的链接,以及通过这

Java微信公众平台开发模式+自定义按钮源码

首先,想用开放模式需要先成为开发者.成为开发者有两种写法. 一是:通过jsp页面,用out.print("echostr")//SHA1加密的字符串: 二是:通过Servlet.doGet返回exhostr,给微信平台. 这里我只写第二种方式的请求(这里的请求是以get方式请求),代码如下: import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.ut

微信开发-PC调试-JS-SDK功能之分享功能调试

一般涉及和第三方的开发调试,都会比较麻烦些.不过,像微信这样的大公司呢,产品技术是过硬的,所以,基本上只要自己把文档看仔细了,弄好了,基本就没有问题了. 对于后端接口一类的调试,主要就是通过打印访问日志的方式,进行一步步排查,常见的错误官方文档也有提示,仔细找找就能发现问题. 本文主要讲解js-sdk的调试方式,因此就不说后台接口的问题了. js-sdk的调试难点在于,在手机上的调试,无法监控各种传输状态,由于是js类的操作,也不方便打印日志什么的. 不过幸好,微信官方提供了一个pc版本的调试工