介绍
这篇文章给大家介绍如何在微信开发中获取JSAPI票,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强>一、获取流程强>
1,获取access_token
2,通过access_token换取jsapi_ticket
3,签名算法
签名生成规则如下:参与签名的字段包括noncestr(随机字符串),有效的jsapi_ticket,时间戳(时间戳),url(当前网页的url,不包含#及其后面部分)。对所有待签名参数按照字段名的ASCII码从小到大排序(字典序)后,使用url键值对的格式(即key1=value1& key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行url转义。
<强>二,具体实现方式强>
1,获取access_token
/* * ,* [getAccessToken 描述),获取access_token ,* @return [型],[描述],*/private function getAccessToken (), {=美元才能data $ this→getFile ($ this→accessTokenFile);,,如果(时间(),安康;$ data[& # 39;时间# 39;],祝辞,0){ ,,,url 美元;=,“https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential& appid={$ this→appid},秘密={$ this→appsecret}“; ,,,re 美元;=,$ this→httpGet ($ url); ,,,access_token 美元;=,再保险美元[& # 39;access_token& # 39;];,,,, ,,,如果(收取(access_token美元)){ ,,,,,$ data [& # 39; access_token& # 39;],=, access_token美元; ,,,,,$ data[& # 39;时间# 39;],=,时间(),+,7200; ,,,,,这个→美元setFile ($ this→accessTokenFile, json_encode(元数据)); ,,,} }{其他才能 ,,,access_token 美元;=,$ data [& # 39; access_token& # 39;]; ,,},return access_token美元; }
access_token的有效时间是7200年代,故可以采用文件存储的方法进行保存,避免多次请求;
2,获取jsapi_ticket
/* * ,* [getJsapiTicket 描述),获取jsapi_ticket ,* @return [型],[描述],*/private function getJsapiTicket (), {=美元才能access_token $ this→getAccessToken ();=美元才能jsapi_ticket $ this→getFile ($ this→jsapiTicketFile);,,如果(时间(),安康;美元jsapi_ticket[& # 39;时间# 39;],祝辞,0),{ ,,,url 美元;=,“https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$ access_token},类型=jsapi"; ,,,re 美元;=,$ this→httpGet ($ url); ,,,这个→美元preArr (re); ,,,jsapi_ticket 美元;=,再保险美元[& # 39;机票# 39;];,,,, ,,,如果(收取(jsapi_ticket美元)){ ,,,,,$ data [& # 39; jsapi_ticket& # 39;],=, jsapi_ticket美元; ,,,,,$ data[& # 39;时间# 39;],=,时间(),+,7200; ,,,,,这个→美元setFile ($ this→jsapiTicketFile,, json_encode(元数据)); ,,,} }{其他才能 ,,,jsapi_ticket 美元;=,jsapi_ticket美元[& # 39;jsapi_ticket& # 39;]; ,,},return jsapi_ticket美元; }
通过access_token进行交换,得到jsapi_ticket,有效期也是7200年代;
3,生成签名
/* * ,* [getSignpackage 描述),获取签名 ,* @return [型],[描述],*/public function getSignpackage () {=美元才能jsapi_ticket $ this→getJsapiTicket();,,//,注意,URL 一定要动态获取,不能,硬编码。 美元才能protocol =,(!空($ _SERVER [& # 39; https # 39;]),,,, $ _SERVER [& # 39; https # 39;], !==, & # 39;从# 39;,| |,$ _SERVER [& # 39; SERVER_PORT& # 39;],==, 443), ?,“https://",:,“http://"; url 美元;=,才能“美元协议$ _SERVER _SERVER [HTTP_HOST] [REQUEST_URI]“;;=美元才能noncestr $ this→createNonceStr ();=美元才能timestamp 拖延时间(); 时间=美元才能string1 “jsapi_ticket={$ jsapi_ticket}, noncestr={$ noncestr},时间戳={$时间戳},url={$ url}“;; 时间=美元才能signature sha1 ($ string1);,, 时间=美元才能signPackage 阵列(,,, ,,,& # 39;appId& # 39;,,,=祝辞,$ this→appID,,,,, ,,,& # 39;nonceStr& # 39;,=祝辞,noncestr美元,,,,, ,,,& # 39;时间戳# 39;,=祝辞,时间戳美元,,,,, ,,,& # 39;签名# 39;,=祝辞,美元签名, ,,,, return 才能;signPackage美元; }
<>强签名算法强>
使用URL键值对的格式(即key1=value1& key2=value2…)拼接成字符串string1:
对string1进行sha1签名,得到签名:
<强>注意事项:强>
1。签名用的noncestr和时间戳必须与wx.config中的noncestr和时间戳相同。
2。签名用的URL必须是调用JS接口页面的完整的URL。
3。null