微信sdk实现禁止微信分享(使用原生php实现)

在此之前我们已经学习过微信的sdk使用,但是之前实在easyWechat的php插件基础上实现的,具体可以参考:https://www.jb51.net/article/174309.htm

这里我们来使用原生的php实现微信的sdk-禁止微信分享

一:引入所需要的js

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>

二:通过config接口注入权限验证配置

wx.config({
 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: '', // 必填,公众号的唯一标识
 timestamp: , // 必填,生成签名的时间戳
 nonceStr: '', // 必填,生成签名的随机串
 signature: '',// 必填,签名
 jsApiList: [] // 必填,需要使用的JS接口列表
});

签名的生成步骤如下:

1:获取微信公众号的全局唯一接口调用凭据access_token

调取下面的接口获取access_token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

get参数说明:

appid:微信公众号的唯一标识appId

secret:微信公众号的appsecret

根据上面的接口可以获取到微信公众号的全局唯一接口调用凭据access_token,接口返回结果如下:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

2:根据access_token获取jsapi_ticket

调取下面的接口获取jsapi_ticket

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

get参数说明:

access_token:上面接口获取到的access_token

type:类型,这里指定填jsapi

根据上面的接口可以获取到jsapi_ticket,接口返回结果如下:

{
 "errcode":0,
 "errmsg":"ok",
 "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
 "expires_in":7200
}

3:根据获取到的jsapi_ticket和noncestr,timestamp,url生成签名

对所有待签名参数按照字段名的ASCII 码从小到大排序后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串,然后通过sha1加密生成签名

三:通过ready接口处理成功验证后在ready内写我们所需要的微信sdk接口

wx.ready(function(){
 // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

四:具体实现

根据如上说明,这里我们就以禁止微信分享sdk为例实现:

1:php端:

public function actionTicket()
{
  //开启session
  session_start();
  //appId
  $appId = 'wx73d0c47a64aa5315';
  //secret
  $appSecret = 'aba2793c10623350f6aeee5a728099d3';
  if (!isset($_SESSION['ticket'])){
    //获取微信公众号全局唯一接口调用凭据access_token
    $result = $this->getAccessToken($appId, $appSecret);
    $accessToken = $result['access_token'];
    //获取jsapi_ticket
    $getTicket = $this->getTicket($accessToken);
    $ticket = $getTicket['ticket'];
    $_SESSION['ticket'] = $ticket;
  }
  //jsapi_ticket(公众号用于调用微信JS接口的临时票据)
  $ticket = $_SESSION['ticket'];
  //当前时间戳
  $timestamp = time();
  //随机字符串
  $noncestr = $this->getRandCode();
  //当前url
  $url = $this->getUrl();
  $params = [
    'jsapi_ticket' => $ticket,
    'timestamp' => $timestamp,
    'noncestr' => $noncestr,
    'url' => $url,
  ];
  $options = $this->urlParams($params);
  //获取签名
  $signature = sha1($options);
  //将appId,timestamp,noncestr,signature渲染到页面
  return $this->render('ticket', [
    'appId' => $appId,
    'timestamp' => $timestamp,
    'noncestr' => $noncestr,
    'signature' => $signature,
  ]);
}
/*
 * 获取jsapi_ticket
 */
public function getTicket($accessToken)
{
  $params = [
    'access_token' => $accessToken,
    'type' => 'jsapi',
  ];
  $urlParams = $this->urlParams($params);
  $ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?' . $urlParams;
  $result = $this->http_curl($ticketUrl);
  return json_decode($result, true);
}
/*
 * 获取微信公众号的全局唯一接口调用凭据access_token
 */
public function getAccessToken($appId, $appSecret)
{
  $params = [
    'grant_type' => 'client_credential',
    'appid' => $appId,
    'secret' => $appSecret,
  ];
  $urlParams = $this->urlParams($params);
  $accessUrl = 'https://api.weixin.qq.com/cgi-bin/token?' . $urlParams;
  $result = $this->http_curl($accessUrl);
  return json_decode($result, true);
}
/*
 * 获取随机码
 */
function getRandCode($num = 16){
  $array = array(
    'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','v','z',
    '1','2','3','4','5','6','7','8','9','0',
  );
  $tmpstr='';
  $max = count($array);
  for($i=1; $i<=$num; $i++){
    $key = rand(0,$max-1); //'A' -> $array[0]
    $tmpstr .= $array[$key];
  }
  return $tmpstr;
}
/*
 * curl接口调用
 */
public function http_curl($url, $data=null) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
  curl_setopt($curl, CURLOPT_POST, 1);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  $result = curl_exec($curl);
  curl_close($curl);
  return $result;
}
/*
 * 字符串拼接
 */
public function urlParams($params)
{
  ksort($params);
  reset($params);
  $options = '';
  foreach ($params as $key => $value) {
    $options .= $key . '=' . $value .'&';
  }
  $options = rtrim($options, '&');
  return $options;
}
/*
 * 获取当前url
 */
public function getUrl()
{
  //获取协议类型
  $protocalPort = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
  //获取当前执行脚本的url
  $phpSelf = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
  $pathInfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
  $queryString = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
  $relateUrl = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $phpSelf . (!empty($queryString) ? '?' . $queryString : $pathInfo);
  $url = $protocalPort . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '') . $relateUrl;
  return $url;
}

2:前端:

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script>
  $(document).ready(function(){
    wx.config({
      debug: false, // 开启调试模式为true后可以通过alert弹窗将公众号签名等结果反馈出来
      appId: '<?= $appId ?>', // 必填,公众号的唯一标识
      timestamp: '<?= $timestamp ?>', // 必填,生成签名的时间戳
      nonceStr: '<?= $noncestr ?>', // 必填,生成签名的随机串
      signature: '<?= $signature ?>',// 必填,签名
      jsApiList: [
        "hideOptionMenu",
      ]
    });
    //配置成功以后config:ok
    wx.ready(function () {
      //隐藏右上角菜单接口
      wx.hideOptionMenu();
    })
  })
</script>

这样我们就是实现了原生php使用微信sdk

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • vue使用微信JS-SDK实现分享功能

    最近开发微信公众号内嵌H5页面,使用vue搭建的项目,由于业务需求,需要实现微信自定义分享功能,所以项目中集成微信JS-SDK.微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 1.绑定域名 微信公众号开发测试帐号:  http://mp.weixin.qq.com/debug

  • 微信js-sdk分享功能接口常用逻辑封装示例

    本文实例讲述了微信js-sdk分享功能接口常用逻辑封装.分享给大家供大家参考,具体如下: 微信js-sdk 1.0,分享说明: 1.目前支持的分享接口5个,其中分享腾讯微博基本可以忽略 2.接口只是定义分享时的数据,没有提供触发分享功能 一.在ready事件使用使用示例 //分享对象使用 var shareData={ title:'分享标题', desc:'分享描述', link:'http://www.gongjuji.net', imgUrl:'http://www.gongjuji.ne

  • 微信分享调用jssdk实例

    网页在微信中打开,进行分享,详细过程 1.问题说明 搞了半天,终于搞定.说下基本需求,很简单,网页在微信中打开,分享. 网页是html格式,原来分享时会一直显示链接,看了下代码中没有调用jssdk,调用的是一个第三方的平台的分享接口. 2.问题解析 根据微信官方给出的demo,可以看到核心就是获取四个参数,配置wx.config. 四个参数分别是appId.timestamp.nonceStr.signature appId不用说,后面三个都是根据微信的接口得到的,有兴趣的可以看下官方,不过也可

  • 使用微信SDK自定义分享的方法

    一.背景介绍 在微信中打开自己网站的链接,经常会变成下面这样 不太好看有木有,如果你想在分享出来的东西带上你的logo,带上你想要的描述,怎么办,像下面这样 这就需要用到微信的分享SDK,文档链接:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 二.微信SDK使用说明第一步 第一步 先要在微信公众平台上注册一个微信公众号,还必须要是认证的企业或组织,流程走下来大概要个两三天的时间吧,只有认证了的公众

  • 关于微信jssdk实现多图片上传的一点心得分享

    一.首先在common.js里封装一个函数,在需要调用jsSDK的页面引用此方法即可实现微信的信息配置 function signatureJSSDK() { var url = window.location.href.split('#')[0];//后台需要此页面的url来生成参数 $.ajax({ url:IPWeiXinJssdk,//调用后台接口,用后台返回的结果来进行微信接口的基础配置 type:"post", dataType:"json", data

  • 微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】

    本文实例讲述了微信JS-SDK自定义分享功能.分享给大家供大家参考,具体如下: 分享出去的内容,可以通过jssdk进行修改. 1.配置jssdk Wx_config.html <?php import("@.ORG.jssdk"); $jssdk = new JSSDK(C('oauth_config.appid'), C('oauth_config.appsecret')); $signPackage = $jssdk->GetSignPackage(); ?> &

  • 微信JS-SDK分享功能的.Net实现代码

    JS-SDK接口是什么? 为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照.选图.语音.位置等手机系统的能力,并方便开发者直接使用微信分享.扫一扫等微信特有的能力,微信推出了JS-SDK的整体开发包,供开发者方便使用. 分享功能 官方文档里提供了php.java.node.js以及python的示例代码,唯独没有c#版的,为了弥补广大.net用户的需求,我把php版本的示例代码逻辑照搬成了.net版,并在网页前端中加入了分享功能,希望对大家有用. 程序实现 流程图 程序里

  • 浅谈微信JS-SDK 微信分享接口开发(介绍版)

    本文主要是分享自己的开发过程,希望能给部分存在同样问题的朋友一点点帮助: 最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看分享效果. 通过查看微信公众平台文档,找到自己所需要的说明文档,明确开发步骤,说明文档截图如下: 开发步骤: 1.按照说明文档完成步骤1.1.1 2.引入js文件 在分享的页面中添加js文件 <script src="h

  • 微信JSSDK分享功能图文实例详解

    本文实例讲述了微信JSSDK分享功能.分享给大家供大家参考,具体如下: 这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可 工欲善其事,必先利其器,好好利用下边的帮助工具,都是腾讯给开发人员的工具 1.微信开发者说明文档:点击查看 2.微信WEB开发者工具: Windows 64位版本:下载地址 Windows 32位版本:下载地址 Mac版本:下载地址 3.微信JSSDK分享sample:点击下载 4.在线DEMO:http://203.

  • 微信sdk实现禁止微信分享(使用原生php实现)

    在此之前我们已经学习过微信的sdk使用,但是之前实在easyWechat的php插件基础上实现的,具体可以参考:https://www.jb51.net/article/174309.htm 这里我们来使用原生的php实现微信的sdk-禁止微信分享 一:引入所需要的js <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <script src=&qu

  • Python使用微信SDK实现的微信支付功能示例

    本文实例讲述了Python使用微信SDK实现的微信支付功能.分享给大家供大家参考,具体如下: 最近一段时间一直在搞微信平台开发,v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为Python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo照葫芦画瓢就可以了. 代码放到github下载地址:https://github.com/Skycrab/wzhifuSDK 还可以点击此处本站下载. 我主要测试了JsApi调用方式,其它的调用

  • Android编程之微信SDK分享功能过程步骤详细分析

    本文实例讲述了Android编程之微信SDK分享功能过程步骤详细分析.分享给大家供大家参考,具体如下: 之前已经分析过怎么用官方的demo分享微信信息了,在这里我就不再多说,其中关于在自己应用分享说得很简单,本文作者也是经过一番折腾才弄成功,为了以后让大家都少走弯路,决定在这里从头到尾介绍怎么在自己的应用中分享功能 注意:顺序不能乱!! 1.建立自己的应用 TestShareWX (1)应用包名是com.freeson.test,然后建立一个测试Activity,名字为TestActivity,

  • vue引入微信sdk 实现分享朋友圈获取地理位置功能

    最近入职的公司主要做微信端的h5,所以在所难免要引用sdk.虽然官方文档写的还算清楚,但是还是有坑. 1.在index.html中 引入微信sdk <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> 2.在assets/js 下新建文件 wx.js export default { wxShowMenu: fu

  • VueJs单页应用实现微信网页授权及微信分享功能示例

    在实际开发中,无论是做PC端.WebApp端还是微信公众号等类型的项目的时候,或多或少都会涉及到微信相关的开发,最近公司项目要求实现微信网页授权,并获取微信用户基本信息的功能及微信分享的功能,现在总算完成了,但开发过程中遇到好几个坑.废话不多说了,开始正题. 描述点 微信相关开发知识了解 怎么样实现微信相关功能本地测试 微信网页授权 微信分享 微信相关开发知识了解 微信公众号的appId,AppSecret 当我们注册一个微信公众号后,便能够得到一个appId(每个微信公众号只有一个,一个微信公

  • Android 实现微信,微博,微信朋友圈,QQ分享的功能

    Android 实现微信,微博,微信朋友圈,QQ分享的功能 一.去各自所在的开发者平台注册相应的Key值:引入相关jar包.权限等 二.ShareUtil工具类 import android.app.Activity; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bit

  • JavaScript禁止微信浏览器下拉回弹效果

    本文实例为大家分享了JavaScript禁止微信浏览器下拉回弹的效果,供大家参考,具体内容如下 方法1: <script type="text/javascript"> var overscroll = function(el){ el.addEventListener('touchstart', function(){ var top = el.scrollTop; var totalScroll = el.scrollHeight; var currentScroll

  • Android开发:微信授权登录与微信分享完全解析

    前言 在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用,于是微信,微博,QQ说了:来来来,你们都可以用我家的帐号登录你家应用,只要你遵循OAuth2.0协议标准就行.于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平

  • vue 项目如何引入微信sdk接口的方法

    做微信的网页基本上都要接入微信的sdk,我在做的时候,也颇费了一番功夫,然后就想记录一下,供自己日后翻阅,以及让有需要的朋友可以做一下参考,如果喜欢的可以点波赞,或者关注一下,希望可以帮到大家. 安装sdk npm install weixin-js-sdk --save 开始之前大家可以先读一读微信公众号的 接入文档,vue是单页面项目,比如你想要接入微信分享功能,分享功能在每个路由地址都要有,因为每个路由的url是不一样的,搜易就需要在每个路由地址都引入一遍. 整体步骤: vue引入sdk的

随机推荐