微信分享源码PHP版JS-SDK接口_php h5微信分享 JSSDK

本文介绍了如何配置微信JS-SDK的JS安全域名,以及在PHP后端生成签名包的过程。通过创建JSSDK类,详细讲解了获取AppID、AppSecret,以及获取和设置access_token和jsapi_ticket的方法。前端页面的JS部分展示了如何使用wx.config进行配置,以实现分享到朋友圈和聊天的功能。
摘要由CSDN通过智能技术生成

1:绑定JS安全域名

登陆微信公众平台,点击"公众号设置"->"功能设置"->"设置"。(测试号绑定方法:进入测试号管理页面,找到JS接口安全域名项绑定)

绑定域名前,首先根据公众平台的提示将指定的txt文件上传到将要设置的域名对应的目录下,并给777权限。

域名格式:这里填写的是一级域名,不带www和http;最多可以设置三个域名;如果你的项目域名是http://test.domain.com,那么JS接口安全域名为test.domain.com;设置完后点击确定。

域名绑定失败或者域名不存在会报错误:invalid url domain

JS接口安全域名官方说法是:开发者可在该域名下调用微信开放的JS接口

(相比以前的分享没有任何域名限制,这里设置安全域名,目的是为了当发现此公众平台发现诱导分享行为时,可以根据此域名追溯到所有分享出去的链接,以及通过这些链接增加的粉丝。这样,微信就可以牢牢控制了你的微信平台,一旦发现违规,让分享链接失效,删除掉诱导行为增加的粉丝,是瞬间就可以完成的。)

2:在开发者中心中获取AppID和AppSecret(作为获取令牌使用)

注意:生成AppSecret后,关闭当前页面之后,公众平台将不再储存和显示AppSecrec,请妥善保存。

php后端首先创建jssdk文件

//jssdk类

class JSSDK

{

private $appId='';

private $appSecret='';

// public function __construct($appId, $appSecret) {

// $this->appId = $appId;

// $this->appSecret = $appSecret;

// }

public function getSignPackage()

{

$jsapiTicket = $this->getJsApiTicket();

$url = "http://$_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;

}

private function createNonceStr($length = 16)

{

$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

$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($this->getCacheTicket());

if (empty($data)) {

$accessToken = $this->getAccessToken();

$url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";

$res = json_decode($this->httpGet($url));

$data = new \stdClass();

$ticket = $res->ticket;

if ($ticket) {

$data->expire_time = time() + 7000;

$data->jsapi_ticket = $ticket;

$this->setCacheTicket(json_encode($data));

}

} else {

$ticket = $data->jsapi_ticket;

}

return $ticket;

}

private function getAccessToken()

{

// access_token 应该全局存储与更新,以下代码以写入到文件中做示例

$data = json_decode($this->getCacheToken());

if (empty($data)) {

$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_token;

$data = new \stdClass();

if ($access_token) {

$data->expire_time = time() + 7000;

$data->access_token = $access_token;

$this->setCacheToken(json_encode($data));

}

} else {

$access_token = $data->access_token;

}

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_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

private function getCacheToken()

{

return Cache::get("weixin_share_token");

}

private function setCacheToken($token)

{

return Cache::set("weixin_share_token",$token,7000);

}

private function getCacheTicket()

{

return Cache::get("weixin_share_ticket"); //缓存获取,也可自己放入数据库存储

}

private function setCacheTicket($ticket)

{

return Cache::set("weixin_share_ticket",$ticket,7000); //设置缓存

}

}

//前端页面JS部分

var appId = '';

var timestamp = '';

var nonceStr = '';

var signature = '';

var url = '';

wx.config({

debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: appId, // 必填,公众号的唯一标识

timestamp:timestamp, // 必填,生成签名的时间戳

nonceStr: nonceStr, // 必填,生成签名的随机串

signature: signature,// 必填,签名

jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'] // 必填,需要使用的JS接口列表

});

wx.ready(function(){

wx.onMenuShareAppMessage({

title: '标题', // 分享标题

desc: '分享描述', // 分享描述

link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

imgUrl: '图', // 分享图标

success: function () {

}

});

wx.onMenuShareTimeline({

title: '标题', // 分享标题

link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

imgUrl: '图', // 分享图标

success: function () {

}

});

});

微信公众号JS-SDK签名算法是用来在网页中调用微信公众号接口时验证身份和保护数据安全的一种机制。下面我来介绍一下如何使用PHP语言实现该签名算法。 1. 首先,你需要获取微信公众号的appid和appsecret,这些信息可以在公众号的开发者后台获取。 2. 在你的PHP代码中,引入微信官方提供的SDK文件,即WechatJSSDK类文件。 3. 创建一个WechatJSSDK对象,并将公众号的appid和appsecret作为参数传递给构造函数。 ```php require_once 'WechatJSSDK.php'; $wechatJSSDK = new WechatJSSDK('your_appid', 'your_appsecret'); ``` 4. 调用WechatJSSDK对象的getSignature方法,传递当前网页的URL作为参数。该方法将返回一个数组,其中包含appId、timestamp、nonceStr和signature。 ```php $url = 'http://example.com/page.html'; $signature = $wechatJSSDK->getSignature($url); ``` 5. 最后,将获取到的signature数组中的数据输出到前端页面,供前端JS调用。 ```php echo json_encode($signature); ``` 通过以上步骤,你就可以在PHP中实现微信公众号JS-SDK签名算法了。当网页加载时,可以获取到签名数据,然后在前端JS中初始化微信JS-SDK,进行公众号的相关操作,比如获取用户信息、分享到朋友圈等。 需要注意的是,你需要将WechatJSSDK类文件正确引入,并根据自己的appid和appsecret填写正确的参数。另外,微信的官方文档中也提供了详细的签名算法说明,你可以参考官方文档进行更深入的学习和理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值