微信文档 ,https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html,

在用微信自定义分享,遇到了几个坑,记录一下。

注意点1:进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。注意公众号需要认证,否则可能提示使用接口 没有权限;

注意点2:access_token是公众号的全局唯一接口调用凭据,有效时间2小时,注意缓存,不能每次都获取新的,次数一天2000次,可以缓存,或者存入数据表,用时判断当前时间和存入的时间差。实在超过,可在微信后台 接口权限中清空次数,一个月只能清3次。

其中的jsapi_ticket也是,缓存或者存表。

注意点3: 签名的注意事项

注意点4:签名时的url, 在pc的微信中,url没有拼接什么,而在手机的微信中,会在你当前页面上自动拼接上朋友圈 from=timeline,微信群 from=groupmessage,好友分享 from=singlemessage,签名时要注意,不要漏掉,可以在前台ajax请求时,或者当前页面的url,传入后台签名。

注意点5:

在手机微信中这些接口确实已经废弃,用了,就会提示不支持,而在pc微信中,还是用这些,不能用新的

由于pc和手机使用的方法不同,在php中定义了两套,用手机打开时访问一套,pc打开时访问一套,或者弄访问地址完全不一样的页面,pc一个地址,手机一个地址

下面是php中的定义,手机和pc虽然是同一个网址,但是真正访问的还是两套

function is_mobile(){
$user_agent = $_SERVER['HTTP_USER_AGENT']; $mobile_agents = Array("240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","android","anywhereyougo.com","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly ","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg ","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte");
$is_mobile = false;
foreach ($mobile_agents as $device) {//这里把值遍历一遍,用于查找是否有上述字符串出现过
if (stristr($user_agent, $device)) { //stristr 查找访客端信息是否在上述数组中,不存在即为PC端。
$is_mobile = true;
break;
}
}
return $is_mobile;
} if(is_mobile()){ //跳转至wap分组
define('BIND_MODULE','Mobile');
}else{
define('BIND_MODULE','Home');
}

判断access_token 过期,我这只是2000秒,远远不到7200秒(2小时),

time字段设置为了默认值当前时间
  $access_time = M("dc_weixin")->order("id desc")->getField("time");
$time = time() - strtotime($access_time);
if($time>2000){
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->app_id."&secret=".$this->app_secret;
$content = file_get_contents($url);
$result = json_decode($content);
$data['access_token'] = $result->access_token;
$weixin = M("dc_weixin")->data($data)->add();
}

  //jsapi_ticket

  public function getJk(){
$this->getToken();
$access_token = M("dc_weixin")->order("id desc")->getField("access_token"); $jk_time = M("dc_jk")->order("id desc")->getField("time");
$time = time() - strtotime($jk_time);
if($time>2000){
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
$content = file_get_contents($url);
$result = json_decode($content);
$data['jk'] = $result->ticket;
$weixin = M("dc_jk")->data($data)->add();
} }
 /*
* 随机字符串
*/
function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// "-"
$uuid =
substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen;
return str_replace("-","",$uuid);
}

//签名   页面里ajax访问,签名的方法

 public function dcsign_mob(){

$html = $_SERVER['HTTP_REFERER'];
$time = strtotime(date('Y-m-d H:i:s',time()));
$nostr = $this->create_guid();
$jk= M("dc_jk")->order("id desc")->getField("jk"); $url = "jsapi_ticket=".$jk."&noncestr=".$nostr."&timestamp=".$time."&url=".$html;
$signature = sha1($url); $data['html'] = $html;
$data['time'] = $time;
$data['nostr'] = $nostr;
$data['signature'] = $signature;
$this->ajaxReturn($data); //返回到html也中
}
 $.ajax({
url: "{:U('**/**')}",
type: "get",
//data:{} //这里没有将页面的url传入签名方法中,
timeout: 20000, //超时时间设置,单位毫秒
success: function (data) { console.log(data); wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '*****', // 必填,公众号的唯一标识
timestamp: data.time, // 必填,生成签名的时间戳
nonceStr: data.nostr, // 必填,生成签名的随机串
signature: data.signature,// 必填,签名
jsApiList: [ 'checkJsApi',
'onMenuShareTimeline','onMenuShareAppMessage','updateAppMessageShareData','updateTimelineShareData'] // 必填,需要使用的JS接口列表
}); wx.ready(function() { wx.updateAppMessageShareData({
title: shareTitle, // 分享标题
desc: descContent, // 分享描述
link: lineLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: imgUrl, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
wx.updateTimelineShareData({
title: shareTitle, // 分享标题
desc: descContent, // 分享描述
link: lineLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: imgUrl, // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
}); }); },
error: function (xhr, textStatus, errorThrown) {
/*错误信息处理*/
alert("进入error---");
alert("状态码:"+xhr.status);
alert("状态:"+xhr.readyState);//当前状态,0-未初始化,1-正在载入,2-已经载入,3-数据进行交互,4-完成。
alert("错误信息:"+xhr.statusText );
alert("返回响应信息:"+xhr.responseText );//这里是详细的信息
alert("请求状态:"+textStatus);
alert(errorThrown);
alert("请求失败");
},
complete: function (XMLHttpRequest, status) {
if (status == 'timeout') {
layer.msg("请求超时,请稍后再试!");
layer.close(index);
}
}
});

微信JS-SDK自定义分享接入的注意点的更多相关文章

  1. 微信js接口自定义分享内容

    最近客户有个要求,需要给网页添加微信分享功能,当然指的是用微信自带浏览器的时候,希望用户在最后一页点击分享的时候是分享的首页.曾经无意中看到过微信公众开发者平台提供了js接口,所以试着做了做,果然,跌 ...

  2. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

  3. 微信js sdk上传多张图片

    微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...

  4. 实战微信JS SDK开发:贺卡制作与播放(1)

    前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...

  5. 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)

    进行微信开发已经一阵子了,从最初的什么也不懂,到微信授权登录,分享,更改底部菜单,素材管理,等. 今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入. 官方文档走一下简单说:四步 ...

  6. 微信JS SDK配置授权,实现分享接口

    微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...

  7. 微信js sdk分享开发摘记java版

    绑定域名和引入js的就不说了 废话不说直接上代码 public void share(HttpServletRequest request) throws Exception { StringBuff ...

  8. 微信js SDK接口

    微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...

  9. 微信JS SDK Demo 官方案例[转]

    摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用 ...

  10. 微信JS SDK PHP Demo

    一.JSSDK类定义 <?php class JSSDK { private $appId; private $appSecret; public function __construct($a ...

随机推荐

  1. python之路52 ORM查询、ORM事务、查询优化、常用字段及参数、ajax方法

    Q查询进阶操作 from django.db.models import Q q_obj = Q() # 1.产生q对象 q_obj.connector = 'or' # 默认多个条件的连接是and可 ...

  2. python之路24之 面向对象动静态方法、继承、派生

    昨日内容回顾 人狗大战 1.直接使用字典表示人和狗 p1 = {} p2 = {} p3 = {} p4 = {} 2.封装产生人和狗的函数 def crreate_person():pass def ...

  3. [LeetCode]最大连续1的个数

    题目 代码 class Solution { public: int findMaxConsecutiveOnes(vector<int>& nums) { int length= ...

  4. Pytorch:单卡多进程并行训练

    1 导引 我们在博客<Python:多进程并行编程与进程池>中介绍了如何使用Python的multiprocessing模块进行并行编程.不过在深度学习的项目中,我们进行单机多进程编程时一 ...

  5. VUE基础之:visible.sync-模态框显示隐藏、elementUI dialog组件报错或者visible属性不生效问题

    VUE基础之:visible.sync-模态框显示隐藏.elementUI dialog组件报错或者visible属性不生效问题 这篇文档存成草稿2年了,最近终于有时间拉出来写完了.... 我们日常开 ...

  6. Hive删除分区名称中含有特殊字符

    先说方案:通过show partitions和hdfs url看到的都不是真正的分区名称,都是经过URI重新编码的,访问这些分区应该使用分区名称的原始字符串. 场景描述 当我们在SQL语句中使用变量时 ...

  7. 简单了解C语言如何构建多文件项目

    简单理解C语言如何构建工程 首先我们最好有一个好用的编辑器,vscode也好,visual studio也罢,dev也行,这里我们使用的是code::block: 一.了解C语言工程的构建原理 ​ 首 ...

  8. 【Oculus Interaction SDK】(七)使用射线进行交互(物体 & UI)

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  9. 亲测有效! Super PhotoCut Pro 超级抠图工具 V2.8.8 for mac 破解版

    亲测有效! Super PhotoCut Pro 超级抠图工具 V2.8.8 for mac  破解版 Super PhotoCut 是一款专业的,非常易于使用的图片抠图工具.它能够准确地覆盖你想要去 ...

  10. Kinsoku jikou desu新浪股票接口变动

    1.问题原因 新浪股票接口返回如标题所示值:Kinsoku jikou desu! http://hq.sinajs.cn/list=code 新浪股票的接口变动,需要在请求头中添加Referer值. ...