微信小程序分享接口怎么开发?

9158APP 0

微信小程序分享接口怎么开发?

毫不夸张地说,微信是中国的全民应用。每个人在日常生活中都离不开它。作为微信的一项重要功能,大家自然熟悉微信分享界面。微信的这个功能就更重要了。它给人们的生活带来了极大的便利,但仍有少部分同学不知道微信分享接口。下面小编就来教大家,希望能够对大家有所帮助。

1.微信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_TOKENtype=jsapi

成功返回如下JSON:

{

‘错误代码’:0,

'errmsg':'好的',

'机票':'bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA',

'expires_in':7200

}

获取jsapi_ticket后,即可生成签名用于JS-SDK权限验证。

3.签名算法实现

签名生成规则如下:参与签名的字段包括noncestr(随机字符串)、有效的jsapi_ticket、时间戳(timestamp)、

url(当前网页的URL,不包括#及其后面的部分)。对于所有要根据字段名称的ASCII 进行签名的参数

将代码从小到大(字典顺序)排序后,使用URL键值对的格式拼接成字符串string1(即key1=value1key2=value2.)。这里需要注意的是,所有的参数名称都是小写字符。对string1进行sha1加密,字段名和字段值使用原始值,不进行URL

逃脱。

即signature=sha1(string1)。例子:

随机数=Wm3WZYTPz0wzccnW

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg

时间戳=1414587457

url=http://mp.weixin.qq.com?params=value

步骤1.所有参数根据字段名的ASCII进行签名

将代码从小到大(字典顺序)排序后,使用URL键值对格式(即key1=value1key2=value2.)拼接成字符串string1:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qgnoncestr=Wm3WZYTPz0wzccnWtamp=1414587457url=http://mp.weix in.qq.com?params=值

步骤2.使用sha1对string1进行签名以获得签名:

0f9de62fce790f9a083d5c99e95740ceb90c27ed

完整代码如下

类JSSDK {

私有$appId;

私人$appSecret;

公共函数__construct($appId, $appSecret) {

$这个appId=$appId;

$这个appSecret=$appSecret;

}

公共函数getSignPackage() {

$jsapiTicket=$this-getJsApiTicket();

//注意,URL必须动态获取,不能硬编码。

$protocol=(!empty($_SERVER['HTTPS']) $_SERVER['HTTPS'] !==

‘关闭’|| $_SERVER['SERVER_PORT']==443) ? 'https://' 'http://';

$url='$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]';

$时间戳=时间();

$nonceStr=$this-createNonceStr();

//这里参数的顺序要按照键值ASCII码升序排序。

$字符串=

'jsapi_ticket=$jsapiTicketnoncestr=$nonceStrtamp=$timestampurl=$url';

$签名=sha1($字符串);

$signPackage=数组(

'appId'=$this-appId,

'nonceStr'=$nonceStr,

'时间戳'=$时间戳,

'url'=$url,

'签名'=$签名,

'原始字符串'=$字符串

);

返回$signPackage;

}

私有函数createNonceStr($length=16) {

$字符=

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

$str='';

for ($i=0; $i $length; $i++) {

$str .=substr($chars, mt_rand(0, strlen($chars) - 1), 1);

}

返回$str;

}

私有函数getJsApiTicket() {

//jsapi_ticket 应全局存储和更新。以下代码以写入文件为例。

$data=json_decode(file_get_contents('jsapi_ticket.json'));

if ($data-expire_time time()) {

$accessToken=$this-getAccessToken();

//如果是企业账号,则使用以下URL获取票据

//$url=

'https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken';

$网址=

'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapiaccess_token=$accessToken';

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

$ticket=$res-ticket;

如果($票){

$data-expire_time=时间() + 7000;

$data-jsapi_ticket=$ticket;

$fp=fopen('jsapi_ticket.json', 'w');

fwrite($fp, json_encode($data));

fclose($fp);

}

} 别的{

$ticket=$data-jsapi_ticket;

}

返回$机票;

}

私有函数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-appIdcorpsecret=$this-appSecret';

$网址=

'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credentialappid=$this-appIdsecret=$this-appSecret';

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

$access_token=$res-access_token;

如果($access_token){

$data-expire_time=时间() + 7000;

$data-access_token=$access_token;

$fp=fopen('access_token.json', 'w');

fwrite($fp, json_encode($data));

fclose($fp);

}

} 别的{

$access_token=$data-access_token;

}

返回$access_token;

}

私有函数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);

卷曲_关闭($卷曲);

返回$res;

}

}