微信接口调用 b0a2
2016-05-16 14:26
731 查看
1.有appid,appsecret和微信调用网址URL
2.php先通过appid和appsecret向获取token网址请求token
3.用token向获取ticket网址请求ticket
4.将已获得的数据照微信规范处理后发送到URL,获取signpackage
5.由于token和ticket有请求次数限制和过期时间,所以应在本地缓存这两个数据,过期后再重新获取
getSign.php
jssdk.php
access_token.php
jsapi_ticket.php
2.php先通过appid和appsecret向获取token网址请求token
3.用token向获取ticket网址请求ticket
4.将已获得的数据照微信规范处理后发送到URL,获取signpackage
5.由于token和ticket有请求次数限制和过期时间,所以应在本地缓存这两个数据,过期后再重新获取
getSign.php
<?php header("Access-Control-Allow-Origin: *"); require_once "jssdk.php"; $url = $_POST['url']; $jssdk = new JSSDK("XXX", "XXX",$url); $signPackage = $jssdk->GetSignPackage(); $signPackage=json_encode($signPackage); echo $signPackage; ?>
jssdk.php
<?php class JSSDK { private $appId; private $appSecret; private $url; public function __construct($appId, $appSecret ,$url) { $this->appId = $appId; $this->appSecret = $appSecret; $this->url = $url; } public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); // 注意 URL 一定要动态获取,不能 hardcode. if(!$this->url){ $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $this->url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; } $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=".$this->url; $signature = sha1($string); $signPackage = array( "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, // "url" => $this->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->get_php_file("jsapi_ticket.php")); if ($data->expire_time < time()) { $accessToken = $this->getAccessToken(); // 如果是企业号用以下 URL 获取 ticket // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken"; $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode($this->httpGet($url)); $ticket = $res->ticket; if ($ticket) { $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $this->set_php_file("jsapi_ticket.php", json_encode($data)); } } else { $ticket = $data->jsapi_ticket; } return $ticket; } private function getAccessToken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode($this->get_php_file("access_token.php")); if ($data->expire_time < time()) { // 如果是企业号用以下URL获取access_token // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret"; $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; // echo $access_token."<br/>"; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $this->set_php_file("access_token.php", 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); // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。 // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } private function get_php_file($filename) { echo trim(substr(file_get_contents($filename), 15)); return trim(substr(file_get_contents($filename), 15)); } private function set_php_file($filename, $content) { echo "writing in"; $fp = fopen($filename, "w"); fwrite($fp, "<?php exit();?>" . $content); fclose($fp); } }
access_token.php
<?php exit();?> {"access_token":"","expire_time":0}
jsapi_ticket.php
<?php exit();?> {"jsapi_ticket":"","expire_time":0}
相关文章推荐
- 微信 错误码:40018,错误提示:invalid button name size
- 微信 错误码:40018,错误提示:invalid button name size
- 使用Snoopy类实现微信图文抓取功能
- 实习期间第一个小程序
- 微信45028错误,微信has no masssend quota hint错误
- Android微信支付的两大坑点
- 第三方支付平台:微信支付接口
- iOS 教你如何修改微信运动步数
- 微信支付 php之Android接口(调起支付)
- iOS——微信朋友圈小视频的播放和聊天窗口小视频的播放
- 微信上传图文消息素材40007,invalid media_id hint
- 好分销微信公众号营销|微商城三级分销系统平台|微店分销软件
- 如何判断微信浏览器
- 判断手机是否安装微信、qq客户端
- C#开发微信门户及应用(40)--使用微信JSAPI实现微信支付功能
- 微信开发之消息接收--视频消息(八)
- PHP 微信开发
- PCB信号完整性分析--干货!(电子工程专辑微信公众号)
- 微信第三方
- Android高仿微信之mvp实现(四)