php教程

超轻量级php框架startmvc

微信封装的调用微信签名包的类库

更新时间:2020-03-20 08:16:07 作者:startmvc
废话不多说了,直接给大家贴代码了,具体代码如下所示:<?phpnamespaceHome\Model;useThink\M

废话不多说了,直接给大家贴代码了,具体代码如下所示:


<?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;
 }
}

以上所述是小编给大家介绍的微信封装的调用微信签名包的类库,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

微信封装调用微信签名 类库