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