微信推文如何调用微信分享接口开发文档

关键字:微信公众平台 JSSDK 发送给朋友 分享到朋友圈&onMenuShareTimeline&onMenuShareAppMessage&作者:方倍工作室&原文:&
在这篇微信公众平台开发教程中,我们将介绍如何在网页中实现发送给朋友和分享到朋友圈时内容参数自定义的功能。
本文分为以下二个部分:
生成JS-SDK权限验证签名
实现发送给朋友和分享到朋友圈时内容参数自定义
《微信公众平台开发最佳实践》一书中10.5节&发送给朋友与分享到朋友圈&因微信接口变更已经失效,以使用新接口的本教程为准!
一、微信JS-SDK
1. 获得Access Token
access token的获得方法在前面有介绍,详情见&
2. 获取jsapi_ticket
生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket),接口地址如下
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
成功返回如下JSON:
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。
3. 签名算法实现
签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
即signature=sha1(string1)。 示例:
noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=
url=http://mp.weixin.qq.com?params=value
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=&url=http://mp.weixin.qq.com?params=value
步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
完整代码如下
class JSSDK {
private $appId;
private $appSecret;
public function __construct($appId, $appSecret) {
$this-&appId = $appId;
$this-&appSecret = $appSecret;
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(
=& $this-&appId,
"nonceStr"
=& $nonceStr,
"timestamp" =& $timestamp,
"signature" =& $signature,
"rawString" =& $string
return $signPackage;
private function createNonceStr($length = 16) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str = "";
for ($i = 0; $i & $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
return $str;
private function getJsApiTicket() {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("jsapi_ticket.json"));
if ($data-&expire_time & time()) {
$accessToken = $this-&getAccessToken();
// 如果是企业号用以下 URL 获取 ticket
// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode($this-&httpGet($url));
$ticket = $res-&
if ($ticket) {
$data-&expire_time = time() + 7000;
$data-&jsapi_ticket = $ticket;
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
$ticket = $data-&jsapi_
return $ticket;
private function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("access_token.json"));
if ($data-&expire_time & time()) {
// 如果是企业号用以下URL获取access_token
// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this-&appId&corpsecret=$this-&appSecret";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this-&appId&secret=$this-&appSecret";
$res = json_decode($this-&httpGet($url));
$access_token = $res-&access_
if ($access_token) {
$data-&expire_time = time() + 7000;
$data-&access_token = $access_token;
$fp = fopen("access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
$access_token = $data-&access_
return $access_token;
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
二、发送给朋友和分享到朋友圈参数自定义
1. 绑定域名
先登录微信公众平台进入&公众号设置&的&功能设置&里填写&JS接口安全域名&。
2. 获取签名包
require_once "jssdk.php";
$jssdk = new JSSDK("yourAppID", "yourAppSecret");
$signPackage = $jssdk-&GetSignPackage();
3. 引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):
&script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"&&/script&
4.通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。
wx.config({
debug: false,
appId: '&?php echo $signPackage["appId"];?&',
timestamp: &?php echo $signPackage["timestamp"];?&,
nonceStr: '&?php echo $signPackage["nonceStr"];?&',
signature: '&?php echo $signPackage["signature"];?&',
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
'checkJsApi',
'openLocation',
'getLocation',
'onMenuShareTimeline',
'onMenuShareAppMessage'
5. 通过ready接口处理成功验证
地理位置需要在页面加载时就调用,需要把相关接口放在ready函数中调用来确保正确执行
wx.ready(function () {
5.1 通过checkJsApi判断当前客户端版本是否支持分享参数自定义
wx.checkJsApi({
jsApiList: [
'getLocation',
'onMenuShareTimeline',
'onMenuShareAppMessage'
success: function (res) {
alert(JSON.stringify(res));
5.2 使用数组定义分享内容参数
$news = array("Title" =&"微信公众平台开发实践", "Description"=&"本书共分10章,案例程序采用广泛流行的PHP、MySQL、XML、CSS、JavaScript、HTML5等程序语言及数据库实现。", "PicUrl" =&'https://images0.cnblogs.com/i/404/305.jpg', "Url" =&'http://www.cnblogs.com/txw1958/p/weixin-development-best-practice.html');
5.3. 实现JS分享功能
wx.onMenuShareAppMessage({
title: '&?php echo $news['Title'];?&',
desc: '&?php echo $news['Description'];?&',
link: '&?php echo $news['Url'];?&',
imgUrl: '&?php echo $news['PicUrl'];?&',
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
// alert('用户点击发送给朋友');
success: function (res) {
// alert('已分享');
cancel: function (res) {
// alert('已取消');
fail: function (res) {
// alert(JSON.stringify(res));
wx.onMenuShareTimeline({
title: '&?php echo $news['Title'];?&',
link: '&?php echo $news['Url'];?&',
imgUrl: '&?php echo $news['PicUrl'];?&',
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
// alert('用户点击分享到朋友圈');
success: function (res) {
// alert('已分享');
cancel: function (res) {
// alert('已取消');
fail: function (res) {
// alert(JSON.stringify(res));
三、实现效果
弹出请求获取页面
分享时的插件显示方倍工作室的&微信公众平台开发最佳实践
四、获取源码
本节最新的教程说明及源码已同步在《微信公众平台开发最佳实践(第3版)》一书中发布,欢迎购买。
阅读(...) 评论()微信JS-SDK分享接口实例开发(nodeJS) - 简书
微信JS-SDK分享接口实例开发(nodeJS)
本文基于工作使用学习,做的整理笔记
当我们进行微信分享时,分享出去的效果,我们最容易发现的是没有图,那我们就埋一个301 * 301的图。但是,我们又发现没有描述,只有链接。这个该怎么解决呢。最终方法就是需要使用微信公众平台的JS-SDK来实现,调用分享接口。实现这个功能时遇到不少坑,走了不少弯路,这里就整理记录一下以便后面查阅。那么,来一起看看吧。
前提条件:
本文后台基于nodeJS,需要有一点这一方面基础。
(还需域名,服务器,微信公众号或测试号)
编码环境:
系统:OS X EI Capitan
版本:10.12.5
微信JS-SDK.jpg
| - 0.题外话
| - 1.JS-SDK使用说明
| - 2.实例开发
| - 1)获取access_token
| - 2)获取jsapi_ticket
| - 3)计算signature
| - 4)前端调用
| - 5)配置测试
| - 6)优化请求
| - 3.常见问题
| - 1)config错误
| - 2)signature错误
| - 3)url domain错误
| - 4)其他错误
| - 4.附QQ分享
| - 5.结束
当不使用JS-SDK,我们该怎么实现“分享”带缩略图呢?之前有一个取巧的方法,如下:
标题:取meta标签title的内容。
缩略图:取body内第1张符合条件的图片。
图片规格要求:尺寸必须大于300 * 300,放在&img src="" alt=""&标签内。
所以,我们会埋一张301 * 301的图片,比如:
// ![](.../share.png)
在分享的时候会自动获取到这张图片,但实际并没有显示。(但有一定的概率失效,原因未仔细查找,因为准备使用JS-SDK)
1.JS-SDK使用说明
微信JS-SDK说明文档传送门:
阅读文档,发现其实真对我们想要的分享功能,阅读前3大点内容就够了,如下:
绑定域名,配置“JS接口安全域名”
引入JS文件
&script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"&&/script&
通过config接口注入权限验证配置
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
其中,最重要的就是signature签名的生成。附录1告诉我们:
1)生成`signature`需要`jsapi_ticket`,
2)生成`jsapi_ticket`需要`access_token`
3)还有7200秒过期等规则,组装规则(稍后再看)
通过ready接口处理成功验证
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
通过error接口处理失败验证
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
【用自己的话】解释整个流程就是:
先有个公众号,这样就有appID和appSecret(在开发/基本配置分类下)
引入JS文件http://res.wx.qq.com/open/js/jweixin-1.2.0.js,去使用微信JS-SDK
拿access_token,配置IP白名单才能调此接口,根据appID和appSecret进行请求 (有效期7200秒,每次使用前检查,过期重新获取)
拿jsapi_ticket,根据上一步的access_token进行请求 (有效期7200秒,每次使用前检查,过期重新获取)
计算signature,根据上一步的jsapi_ticket
1)排序,参与签名的字段:noncestr(随机字符串),有效的jsapi_ticket,timestamp(时间戳),url(不带#后面部分部分),字典序从小到大排序,
2)拼接,使用URL键值对的格式拼接字符串string1,参数名必须均为小写字符
3)加密,对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义
注意:计算签名必须在服务端完成签名,返回前端。
添加JS接口安全域名(在公众号后台的设置/公众号设置/功能设置中添加),这里需要实现MP_verify_AwmmQFM5B0vHg035.txt文件检查功能
部署测试,注意事项:80端口,域名已备案
2.实例开发
官方DEMO页面和例子传送门:。
如果你有可以使用的公众号,那么直接用就好了。如果没有,就需要使用测试公众号。在在公众号后台的开发/开发者工具/公众平台测试帐号,登陆进入就可以使用测试公众号了。
我这里的信息如下:
appID:wx5ee2
appSecret:af7207aaa4bec3b9b1ed0f
1)获取access_token
// 这里应该判断是否存在签名,是否已过期
//(稍后添加)
// 公众号字段
var appID = "wxa2c416de84300ee5";
var appSecret = "bbacbcee3a573db85498";
// 获取access_token
var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+appID+'&secret='+appS
request(tokenUrl, function (error, response, body) {
if (response.statusCode === 200) {
body = JSON.parse(body);
// 这里我缓存到了global
global.wxshare.access_token = body.access_
// 获取jsapi_ticket
2)获取jsapi_ticket
// 获取jsapi_ticket
var ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + body.access_token + '&type=jsapi';
request(ticket, function (err, response, content) {
content = JSON.parse(content);
if (content.errcode == 0) {
// 这里我缓存到了global
global.wxshare.jsapi_ticket = content.
// 计算signature
3)计算signature
// 计算signature
// 先拿一个当前时间戳,这里我缓存到了global
global.wxshare.deadline = new Date().getTime();
// 通过调用计算签名方法
var signatureStr = sign(content.ticket, req.body.url);
// 当前时间戳
signatureStr.deadline = new Date().getTime();
// 缓存签名
if (signindex && signindex !== 0) {
global.wxshare.signs(signindex, 1, signatureStr);
global.wxshare.signs.push(signatureStr);
// 返回给页面
res.status(200).json(signatureStr);
// 随机字符串
var createNonceStr = function () {
return Math.random().toString(36).substr(2, 15);
var createTimestamp = function () {
return parseInt(new Date().getTime() / 1000) + '';
// 排序拼接
var raw = function (args) {
var keys = Object.keys(args);
keys = keys.sort()
var newArgs = {};
keys.forEach(function (key) {
newArgs[key.toLowerCase()] = args[key];
var string = '';
for (var k in newArgs) {
string += '&' + k + '=' + newArgs[k];
string = string.substr(1);
* @synopsis 签名算法
* @param jsapi_ticket 用于签名的 jsapi_ticket
* @param url 用于签名的 url ,注意必须动态获取,不能 hardcode
* @returns
var sign = function (jsapi_ticket, url) {
var ret = {
jsapi_ticket: jsapi_ticket,
nonceStr: createNonceStr(),
timestamp: createTimestamp(),
var string = raw(ret);
jsSHA = require('jssha');
shaObj = new jsSHA(string, 'TEXT');
ret.signature = shaObj.getHash('SHA-1', 'HEX');
module.exports =
//检查页面链接对应的签名是否可用
var signtag =
// 检查签名
global.wxshare.signs.forEach(function (item, index) {
if (item.url === req.body.url) {
signindex =
if (item.deadline && new Date().getTime() - item.deadline & 6000000) {
//当签名不可用时,检测jsapi_ticket是否可用,来决定是直接请求签名还是先请求jsapi_ticket再请求签名
if (!signtag) {
// 请求操作
// 计算签名操作
// 相应路由
app.post('/signture', Base.wxconfig);
// 对应方法
exports.wxconfig = function(req,res,next) {
4)前端调用
&script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"&&/script&
// 请求签名
url: "/signture",
type: 'post',
data: { url: location.href.split('#')[0] },
success:function(res){
wx.config({
debug: false,
appId: 'wxa2c416de84300ee5',
timestamp: res.timestamp,
nonceStr: res.nonceStr,
signature: res.signature,
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ'
wx.ready(function () {
var shareData = {
title: document.title,
desc: getDesc(),
link: res.url,
imgUrl: getImage()
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
wx.onMenuShareQQ(shareData);
wx.error(function (res) {
alert(res.errMsg);
// 正式环境记得关闭啊!!!!
// 获取描述字段方法
function getDesc() {
var meta = document.getElementsByTagName("meta");
for (var i=0;i&meta.i++){
if(typeof meta[i].name!="undefined"&&meta[i].name.toLowerCase()=="description"){
return meta[i].
// 获取图片
function getImage() {
return 'http://'+location.host+'/images/logo.png';
5)配置测试
添加JS接口安全域名(在公众号后台的设置/公众号设置/功能设置中添加),这里需要实现MP_verify_AwmmQFM5B0vHg035.txt文件检查功能。
因为这个MP_verify_AwmmQFM5B0vHg035.txt文件里,只有一行字符串,直接返回即可
// 相应路由
app.get('/MP_verify_CwPkZ2phenWhKlmR.txt', Base.checkWx);
// 对应方法
exports.checkWx = function(req, res) {
res.send('CwPkZ2phenWhKlmR');
6)优化请求(检查微信环境,减少不必要的微信接口调用次数)
// 检查微信环境
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
// 如果为真,则请求
if(isWeiXin()){
// 去获取signature签名
3.常见问题
官方常见错误查阅传送门:。
因为在实际开发的时候,真的是不端的遇到问题,不断的去找答案。错误出现的话,是有一定顺序的,这对我们找原因有一定的帮助。首先是config fail,若没错的话,才有可能出现invalid signature,若没错的话,才有可能出现``` invalid url domain``。最后就完全没错了,说明已成功。
1)config 错误
如果config fail,一般说明存在配置字段遗漏,或者配置字段的值为空(null,undefined,"")。
2)signature错误
如果报invalid signature错误,一般说明签名没有生成正确,再核对一遍规则。可以使用微信 JS 接口签名校验工具:,对比代码生成出来的是否和检验工具生成的一样。比如时间戳长度,顺序,拼接遗漏。
3)url domain错误
如果报invalid url domain错误,说明配置工作已经OK啦。出现这个的原因是域名没有添加到JS接口安全域名下,或者没有使用80、443端口。
4)其他错误
如permission denied,接口无权限等等,查阅文档吧。
4.附QQ分享
手机QQ对外分享组件接口文档传送门:
阅读文档后发现比较简单,引用一个JS文件,然后几行配置代码。但注意一下:文档页面举例代码含有“微信配置”,请勿重复配置WXconfig。
// 引入JS脚本
&script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/qzact/common/share/share.js"&&/script&
&script type="text/javascript"&
setShareInfo({
document.title, // 获取页面的标题
summary: getDesc, //获取页面的desc
pic: 'http://xxx/xx/pic.png', // 获取图片(这里自己写吧,整站固定图片or页面第一张或指定图片)
url: location.href // 获取地址
// 获取描述字段方法
function getDesc() {
var meta = document.getElementsByTagName("meta");
for (var i=0;i&meta.i++){
if(typeof meta[i].name!="undefined"&&meta[i].name.toLowerCase()=="description"){
return meta[i].
本文的主要内容就是关于“微信JS-SDK的接口调用”,那这里举例就是分享接口,其他接口类推吧,用到什么去看文档。觉得难就不去看的话,就相当于弃坑了;可是仔细去看一下文档,先理清思路步骤,在每个步骤去完成,串联起来也就实现了。回头一看,发现并不难。文章的最后附了一个QQ的分享配置方法,需要可以尝试。
最后针对不同浏览器,这个就说不准了。有的浏览器自己就可以帮你完成图片和描述的完美呈现,有的就只能是URL地址(没有描述)。真要去看这个,可能要进行反复测试找规律,想想都心累了。我们比较常见的也就是“微信”,“QQ”,也许还有“企业微信”。补充一句,“企业微信”不会使用JS-SDK的,但是它可以自动帮你获取到标题、描述,但图片地址就和页面图有关了。需要可以自己留意下。
到这里,就先结束了。
学习是一条漫漫长路,每天不求一大步,进步一点点就是好的。
一个小小的前端工程师,拥有大大的梦想...
微信服务号开发 整体流程 域名报备,服务器搭建 Python开发环境和项目的初始化搭建; 微信公众号注册及开发模式校验配置; 接收关注/取关事件推送和自动回复; IOLoop定时获取access_token和jsapi_ticket; 自定义菜单及点击时获取openid及用...
先来看看微信分享效果: 在没有集成微信分享js-sdk前是这样的:没有摘要,缩略图任意抓取正文图片 在集成微信分享js-sdk后是这样的:标题,摘要,缩略图自定义 一、下载微信SDK开发包 下载地址:http://demo.open.weixin.qq.com/jssdk/...
【前言】 某天,接到这么一个需求:自定义微信网页分享出来的标题,描述和图标。以前没玩过这个,感觉应该很简单,动手了之后,躺过各种坑才知道并没那么容易。完全独立研究排错,感受颇多,分享出来给大家铺一铺路 一: 需求来源
开发了一个移动端H5活动页面,该页面要实现微信中的“分...
本篇技术博客来自Worktile 微信之父 @龚林杰的动情分享,为您详细讲述我们微信公众号【getworktile】背后的点点滴滴~ 现如今,微信已经不再只承担着交流沟通、娱乐大众的功能,微信公众号的推出将微信逐渐转变成个人、商家、企业单位用来营销的重要工具。而微信推出的公...
关于微信JSSDK的操作下面有非常详细的文档 微信JSSDK说明文档 - 微信公众平台开发者文档 具体步骤如下图所示 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 步骤二...
我在四月初开始日更,中间有偶尔断更的几日,也有前几天整理文集时删掉的几篇。现在文章列表里这是第三十五篇。 每天都写文,自然有为更而更的时候,满篇的凑字数。我也曾想过这样是否意义不大,是否实在写不出的时候就停下一两天比较好。 当写作训练营结束,我真的停更了两天。当两天后再来写...
汽车站,动车站,火车站,飞机场~ 上车,下车,我们大多变成了一个人 如果有缘,好极了,一起喽
这是写给你的第八封信 我在我的第七个周年纪念日 里,醒着做了一个长长的梦 梦见了我的前世,我的前世 有你,应该有你,我的姑娘 我看见我穿着长衫 也大概可能依稀赤身裸体 和你遇见在月光下的桥上 那时候还没有路灯 那时候人们还能说些什么 那时候,遇见你的时候 我依旧写诗、胡乱说...
正念练习 “正念的意思,就是觉照,同时它也意味着深入地观察。正念的练习很核心的部分就是不加评判如实的接纳情绪欲望执取等,而不是在第一步就告诉自己这些是不好的,我拒绝接受它;你认为它不好并且拒绝承认这种机制本身就是带有强烈的个人评判。正念并不提倡这么做。
正念练习...

我要回帖

更多关于 微信分享接口调用失败 的文章

 

随机推荐