微信文档 ,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. 【转载】SQL SERVER 存储过程中执行动态Sql语句

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

  2. day12-功能实现11

    家居网购项目实现011 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 27.功能25-事务管理 27.1下订单问题思考 在生成 ...

  3. [随笔所想] UBC学习生活经验分享

    当时受到了很多人的帮助,在网上也查到了很多经验帖子,比如如何办理签证,如何填写表格,要准备哪些材料以及生活上要带哪些物品,等等.当时就想到等我办理好这些,也一定和大家分享,为更多的人提供一些参考. 1 ...

  4. LeetCode-02 两数相加(Add Two Numbers)

    描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您 ...

  5. Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式

    Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式 安装包下载 官网首页:https://zookeeper.apache.org/ 历史版本下载地址:http://a ...

  6. cornerstone4.1破解版&#160;for&#160;mac

    百度网盘: https://pan.baidu.com/s/1l_0rHMF11mZsUP3qJrp7Uw  密码: 8ei9

  7. 基于 VScode 搭建 Matlab 运行环境

    插件 Matlab:代码高亮.语法检查.用户片段 matlab-formatter:代码格式化 Matlab Interactive Terminal:集成终端 配置 Matlab "fil ...

  8. Blazor如何实现类似于微信的Tab切换?

    是否有小伙伴在使用tab的时候想进行滑动切换Tab? 并且有滑动左出左进,右出右进的效果 ,本文将讲解怎么在Blazor中去通过滑动切换Tab 本文中的UI组件使用的是MASA Blazor,您也可以 ...

  9. 从0到1手把手实现vite

    什么是Vite? 法语:轻量化,快速 基于VUE3 非 打包开发服务器,请注意,它是个开发服务器哇!! 快速开发,按需编译,不再等待整个应用编译完成 基于原生模块系统ESModule实现 说白了,就是 ...

  10. SpringBoot Test Junit 联用

    需要导入SpringBoot test和junit的包 @RunWith(SpringRunner.class) @SpringBootTest(classes = PiYuApplication.c ...