《PHP實例:微信封裝的調用微信簽名包的類庫》要點:
本文介紹了PHP實例:微信封裝的調用微信簽名包的類庫,希望對您有用。如果有疑問,可以聯系我們。
PHP編程廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
PHP編程
<?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編程以上所述是小編給大家介紹的微信封裝的調用微信簽名包的類庫,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的.在此也非常感謝大家對維易PHP網站的支持!
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/660.html