|
導讀微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺... 微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺通過網絡快速發送免費(需消耗少量網絡流量)語音短信、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺“、”語音記事本“等服務插件。 這篇文章主要介紹了微信封裝的調用微信簽名包的類庫的相關資料,需要的朋友可以參考下廢話不多說了,直接給大家貼代碼了,具體代碼如下所示: <?php
namespace Home\Model;
use Think\Model;
class WechatModel extends Model {
private $_token = ''; //令牌
private $appid;
private $appsecret;
public function __construct()
{
$this->appid = C('APPID');//公眾號的appid
$this->appsecret = C('APPSECRET');//公眾號的秘鑰
}
//調用js-sdk的簽名包
public function getSignPackage() {
$jsapiTicket = $this->getJsApiTicket();
// 注意 URL 一定要動態獲取,不能 hardcode.(獲取當前網頁的url)
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//時間戳
$timestamp = time();
//隨機字符串獲取
$nonceStr = $this->createNonceStr();
// 這里參數的順序要按照 key 值 ASCII 碼升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
//生成字符串是用來簽名用的
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appid,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}
//使用會員卡領取的簽名包
public function getHuiYuanSignPackage() {
$apiTicket = $this->getApiTicket();
// 注意 URL 一定要動態獲取,不能 hardcode.(獲取當前網頁的url)
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//時間戳
$timestamp = time();
//隨機字符串獲取
// $nonceStr = $this->createNonceStr();
// 這里參數的順序要按照 key 值 ASCII 碼升序排序
$string = $timestamp.$apiTicket."car_id";//card_id為自己創建的會員卡的id
//生成字符串是用來簽名用的
$signature = sha1($string);
$signPackage = array(
"timestamp" => $timestamp,
"signature" => $signature,
);
return $signPackage;
}
//獲取會員卡的api_ticket
public function getApiTicket(){
$data = json_decode(file_get_contents("api_ticket.json"));
if ($data->expire_time < time()) {
$accessToken = $this->getAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token=$accessToken";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket;
if ($ticket) {
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$fp = fopen("api_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$ticket = $data->jsapi_ticket;
}
return $ticket;
}
//獲取隨機字符串
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;
}
//獲取Access Token
public function getAccessToken(){
//將json字符串轉換為json對象(json_encode是將數組轉換為json字符串,json_decode("",true) 如果加true是將json字符串轉化為php數組,不加true轉換為PHP對象)
$data = json_decode(file_get_contents("access_token.json"));
if ($data->expire_time < time()) {
// 如果是企業號用以下URL獲取access_token
$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;
if ($access_token) {
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$fp = fopen("access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$access_token = $data->access_token;
}
return $access_token;
}
//獲取jsapi_ticket(jsapi_ticket是公眾號用于調用微信JS接口的臨時票據)
private function getJsApiTicket() {
// jsapi_ticket 應該全局存儲與更新,以下代碼以寫入到文件中做示例
$data = json_decode(file_get_contents("jsapi_ticket.json"));
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;
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$ticket = $data->jsapi_ticket;
}
return $ticket;
}
//獲取用戶的openid
public function openId(){
$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
if (!isset($_GET['code'])) {
//獲取組裝的url
$openidUrl = $this->snsapi_base($url);
redirect($openidUrl);
}else{
$openidAccess_token = $this->openidAccess_token($_GET['code']);
return $openidAccess_token;
}
}
//獲取微信用戶的opnid
public function getOpenId($openid,$access_token)
{
$userInfo = $this->getUserInfo($openid,$access_token);
return $userInfo;
}
public function snsapi_base($redirect_uri, $scope = "snsapi_userinfo", $state = 0)
{
$appId = $this->appid;
$url = "https://open.weixin.qq.com/connect/oauth2/authorize";
$url .= "?appid=$appId";
$url .= "&redirect_uri=http://$redirect_uri";
$url .= "&response_type=code";
$url .= "&scope=$scope";
$url .= "&state=$state#wechat_redirect";
return $url;
}
public function openidAccess_token($code){
$appId = $this->appid;
$appSecret= $this->appsecret;
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=$code&grant_type=authorization_code";
return json_decode($this->httpGet($url),true);
}
//獲取用戶信息
public function getUserInfo($openid, $access_token){
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN ";
return json_decode($this->httpGet($url),true);
//請求
}
private function 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);
curl_close($curl);
return $res;
}
}以上就是微信封裝的調用微信簽名包的類庫的詳細內容,更多請關注php中文網其它相關文章! 微信提供公眾平臺、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號碼”、“附近的人”、掃二維碼方式添加好友和關注公眾平臺,同時微信將內容分享給好友以及將用戶看到的精彩內容分享到微信朋友圈。 |
溫馨提示:喜歡本站的話,請收藏一下本站!