Maison Applet WeChat Développement WeChat L'interface de l'enveloppe rouge WeChat Cash implémente le partage d'exemples de code pour l'émission de l'enveloppe rouge

L'interface de l'enveloppe rouge WeChat Cash implémente le partage d'exemples de code pour l'émission de l'enveloppe rouge

Apr 13, 2017 am 10:30 AM

L'interface de l'enveloppe rouge WeChat Cash implémente l'émission de l'enveloppe rouge :

1 : Processus : [

Processus : les utilisateurs de WeChat accèdent à la page d'activité de l'enveloppe rouge - "Le backend détermine si il est accessible par WeChat

[Non : inviter à utiliser WeChat pour ouvrir la connexion, Oui : demander à l'utilisateur s'il doit autoriser l'autorisation et obtenir ses informations utilisateur [openID et autres informations]]--"

Entrez dans la page de l'événement de l'enveloppe rouge--- 》L'utilisateur clique pour recevoir l'enveloppe rouge [Juge si l'enveloppe rouge a été reçue] Oui : [Indique que l'enveloppe rouge a été reçue] Non

--"Le programme back-end appelle l'interface pour émettre l'enveloppe rouge

--"Les utilisateurs de WeChat sont en Recevoir une enveloppe rouge dans WeChat

-->Ouvrez l'enveloppe rouge

-->Le montant de l'enveloppe rouge sera ajouté au changement de portefeuille

-->Terminer la distribution de l'enveloppe rouge.

]

2 : Pour mettre en œuvre l'interface d'enveloppe rouge WeChat Cash afin d'émettre des enveloppes rouges, les conditions suivantes doivent d'abord être remplies :

1 Le compte public WeChat utilisé pour. l'émission d'enveloppes rouges doit être un type de service

2 Après vous être connecté au site officiel de la plateforme officielle WeChat, accédez à la page de gestion backend de la plateforme publique - page Developer Center,

cliquez sur le bouton "Modifier la configuration" et remplissez l'adresse du serveur (URL), le jeton et l'encodageAESKey ,

où URL est l'URL de l'interface utilisée par les développeurs pour recevoir les messages et événements WeChat. Le token peut être renseigné arbitrairement par le développeur, et

est utilisé pour générer une signature (le Token sera comparé au Token contenu dans l'URL de l'interface pour vérifier la sécurité).

EncodingAESKey est renseigné manuellement par le développeur ou généré aléatoirement, et sera utilisé comme clé de cryptage et de déchiffrement du corps du message.

3. Obtenir access_token : les comptes officiels peuvent utiliser AppID et AppSecret pour appeler cette interface afin d'obtenir access_token.

[AppID et AppSecret peuvent être obtenus sur le site officiel de la plateforme publique WeChat - page Developer Center (vous devez être devenu développeur et le compte n'a aucun statut anormal). 】

4. Le compte public WeChat doit ouvrir une « interface d'autorisation de page Web » pour que les utilisateurs puissent obtenir des informations utilisateur de base [en particulier openID, qui est utilisé lors de l'envoi d'enveloppes rouges]

5. WeChat Pay" du compte public WeChat " Merchant ID" dans " " Pour activer le paiement WeChat [le montant des enveloppes rouges sera déduit du compte de paiement], ouvrez l'interface « cash red enveloppe » [appelez cette interface pour émettre des enveloppes rouges ].

6. Connectez-vous au « Compte marchand » [le compte marchand attribué par le compte officiel WeChat. Il y a des instructions au chapitre 5] Dans « API Security », téléchargez la version PHP du certificat [format .pem]

Si la description ci-dessus n'est pas claire, veuillez consulter la documentation du développeur WeChat pour les ventes flash détaillées.

Une partie du code est la suivante [veuillez consulter la pièce jointe pour le reste] :

<?php
namespace RedClient\Controller;
use Think\Controller;
use RedClient\Redpack\WeiXinInfo;
use RedClient\Redpack\Oauth;
use RedClient\Redpack\SendRedPack;
use RedClient\Redpack\CreateRedPack;
class IndexController extends Controller 
    {
        public function index()
            {
                $this->isWeixin();//是否是微信打开
                if($this->access)
                    {
                        $this->display();
                         
                    }
                    else
                        {
                            $class=new Oauth();
                            $class->index(&#39;http://www.myweb.com/index.php/Index/oauth&#39;);
                        }
            }
         
        //获取用户信息 openID
        public function oauth()
            {
                $code=isset($_GET[&#39;code&#39;])?strip_tags(trim($_GET[&#39;code&#39;])):&#39;&#39;;
                $state=isset($_GET[&#39;state&#39;])?strip_tags(trim($_GET[&#39;state&#39;])):&#39;&#39;;
                 
                $class=new Oauth();
                $userInfo=$class->getCode($code,$state);//获取用户信息
                if(!empty($userInfo[&#39;data&#39;]))
                    {
                        //$model=M(&#39;wxuser&#39;);
                        //$result=$model->where(&#39;openid = "&#39;.$userInfo[&#39;data&#39;]->openid.&#39;"&#39;)->field(&#39;openid&#39;)->select();
                        if(empty($result))
                            {
                                $userInfo[&#39;data&#39;]=$this->object2array($userInfo[&#39;data&#39;]);
                                $model->data($userInfo[&#39;data&#39;])->add();
                                 
                            }
                    }
                $userInfo[&#39;data&#39;]=$this->object2array($userInfo[&#39;data&#39;]);
                 
                //创建红包
                $class=new CreateRedPack();
                $red=$class->redval();
                 
                //发红包
                $class=new SendRedPack();
                $configs=array(
                        &#39;send_name&#39;=>&#39;红包发送者名称&#39;,//红包发送者名称
                        &#39;re_openid&#39;=>$userInfo[&#39;data&#39;][&#39;openid&#39;],//接受红包的用户,用户在wxappid下的openid
                        &#39;total_amount&#39;=>$red,//付款金额,单位分
                        &#39;total_num&#39;=>&#39;1&#39;,//红包发放总人数
                        &#39;wishing&#39;=>&#39;红包祝福语&#39;,//红包祝福语
                        &#39;client_ip&#39;=>$_SERVER[&#39;SERVER_ADDR&#39;],//调用接口的机器Ip地址
                        &#39;act_name&#39;=>&#39;活动名称&#39;,//活动名称
                        &#39;remark&#39;=>&#39;备注信息&#39;,//  备注信息
                    );
                $class->setFields($configs);
                $result=$class->requestXml();
                 
                //微信返回信息处理
                if(strtoupper($result[&#39;return_code&#39;])==&#39;SUCCESS&#39;)
                    {
                        if(strtoupper($result[&#39;result_code&#39;])==&#39;SUCCESS&#39;)
                            {
                                //红包发送成功!
                                                         
                                $datas[&#39;flag&#39;]=1;
                                echo $result[&#39;err_code_des&#39;];
                            }
                            else
                                {
                                    //红包发送失败
                                    $datas[&#39;flag&#39;]=0;
                                    $datas[&#39;msg&#39;]=$result[&#39;err_code_des&#39;];
                                    echo $result[&#39;err_code_des&#39;];
                                }
                    }
                    else
                        {
                            //红包发送失败
                            $datas[&#39;flag&#39;]=0;
                            $datas[&#39;msg&#39;]=$result[&#39;err_code_des&#39;];
                            echo $result[&#39;err_code_des&#39;];
                        }
            }
         
        public function isWeixin()
            {
                if (strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;MicroMessenger&#39;) !== false) 
                    { 
                        $this->access=true; 
                    } 
                return false; 
            }
         
        //类转换成数组
        public function object2array($object) 
            {
              if (is_object($object)) 
                  {
                    foreach ($object as $key => $value) 
                        {
                          $array[$key] = $value;
                        }
                  }
                  else 
                      {
                        $array = $object;
                      }
              return $array;
            }
             
    }
    ?>
Copier après la connexion
<?php
namespace RedClient\Redpack;
/**
    简单红包算法类
**/
class CreateRedPack
    {
        private $rid=0;//当前红包随机数
        private $rand_arr=array();//35%是1.0到1.1 红包随机数
        private $rand_arr1=array();//35%是1.1到1.2 红包随机数
        private $rand_arr2=array();//30%是1.2到1.95 红包随机数
        private $red=0;//红包金额
        private $simplered=0;
        private $red_config=array(
                                array(&#39;min&#39;=>1.0,&#39;max&#39;=>1.1),
                                array(&#39;min&#39;=>1.1,&#39;max&#39;=>1.2),
                                array(&#39;min&#39;=>1.2,&#39;max&#39;=>1.95)
                            );
                             
        public function __construct()
            {
                $this->rid=mt_rand(1,10000);//当前红包随机数
                $this->rand_arr=range(1,3500);//35%是1.0到1.1
                $this->rand_arr1=range(3501,7000);//35%是1.1到1.2
                $this->rand_arr2=range(7001,10000);//30%是1.2到1.95
                $this->simplered=666;
            }
             
        public function redval()
            {
                $maxrp=$this->maxred();//随机最大红包金额
                if($maxrp!=$this->simplered)
                    {
                        if(in_array($this->rid,$this->rand_arr))
                            {
                                $red_val=$this->red_config[0];
                                $min=$red_val[&#39;min&#39;]*100;
                                $max=$red_val[&#39;max&#39;]*100;
                                $this->red=mt_rand($min,$max);
                                $this->red=$this->red/100;
                            }
                            elseif(in_array($this->rid,$this->rand_arr1))
                                {
                                    $red_val=$this->red_config[1];
                                    $min=$red_val[&#39;min&#39;]*100;
                                    $max=$red_val[&#39;max&#39;]*100;
                                    $red=mt_rand($min,$max);
                                    $this->red=$this->red/100;
                                }
                                elseif(in_array($this->rid,$this->rand_arr2))
                                    {
                                        $red_val=$this->red_config[2];
                                        $min=$red_val[&#39;min&#39;]*100;
                                        $max=$red_val[&#39;max&#39;]*100;
                                        $this->red=mt_rand($min,$max);
                                        $this->red=$this->red/100;
                                    }
                    }
                    else
                        {
                            $this->red=$maxrp;
                        }
                return $this->red?$this->red:1;
            }
                 
        protected function maxred()
            {
                $rid=mt_rand(1,100000);
                $rid1=mt_rand(1,100000);
                $red=0;
                $dff=$rid-$rid1;
                 
                if($dff > 0)
                    {
                        if(($rid1%$rid1)==$this->simplered)
                            {
                                $red=$this->simplered;
                            }
                    }
                    else
                        {
                            if(($rid1%$rid)==$this->simplered)
                                {
                                    $red=$this->simplered;
                                }
                        }
                         
                return $red;
            }
    }
 
?>
Copier après la connexion
<?php
namespace RedClient\Redpack;
/*********
 
    先在公共平台配置授权的域名;
    然后才能通过,
    网页授权方式获取微信用户基本信息
     
    网页授权流程分为四步: 
 
    1.引导用户进入授权页面同意授权,获取code 
    2.通过code换取网页授权access_token(与基础支持中的access_token不同) 
    3.如果需要,开发者可以刷新网页授权access_token,避免过期 
    4.通过网页授权access_token和openid获取用户基本信息 
 
**********/
class Oauth
    {
        protected $appid=&#39;&#39;;
        protected $redirect_uri=&#39;&#39;;
        protected $state=&#39;&#39;;//mt_rand(100,999);
        protected $appsecret=&#39;&#39;;
        protected $data=array(&#39;flag&#39;=>0,&#39;msg&#39;=>&#39;&#39;,&#39;data&#39;=>&#39;&#39;);
         
         
        public function __construct()
            {
                $this->appid=&#39;appid&#39;;//
                $this->appsecret=&#39;secret&#39;;//;
                $this->state=mt_rand(100,999);
            }
             
        //引导用户访问链接处理函数 
        public function index($redirect_uri)
            {
                $this->redirect_uri=urlencode($redirect_uri);//微信自动跳转到$redirect_uri
                header(&#39;location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=&#39;.$this->appid.&#39;&redirect_uri=&#39;.$this->redirect_uri.&#39;/oauth.php&response_type=code&scope=snsapi_userinfo&state=&#39;.$this->state.&#39;&connect_redirect=1#wechat_redirect&#39;);
            }
             
        public function getCode($code=&#39;&#39;,$state=&#39;&#39;,$token=&#39;&#39;,$webToken=&#39;&#39;)
            {
                $data=array(
                    &#39;errorno&#39;=>&#39;&#39;,
                    &#39;errormsg&#39;=>&#39;&#39;,
                    &#39;data&#39;=>&#39;&#39;
                );
                 
                if(empty($code))
                    {
                        $this->data[&#39;flag&#39;]=0;
                        $this->data[&#39;msg&#39;]=&#39;授权失败!&#39;;
                    }
                    else
                        {   /* 
                                 
                                1获取webtoken
                                2获取reflash_token
                                3获取用户信息 
                            */
  $token_url = &#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;.$this->appid.&#39;&secret=&#39;.$this->appsecret.&#39;&code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;
                         $token = json_decode(file_get_contents($token_url));
                             
                            if (isset($token->errcode)) 
                                {
                                    $data[&#39;errorno&#39;]=$token->errcode;
                                    $data[&#39;errormsg&#39;]=$token->errmsg;
                                }
                                else
                                    {
  $access_token_url = &#39;https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=&#39;.$this->appid.&#39;&grant_type=refresh_token&refresh_token=&#39;.$token->refresh_token;
                                        //转成对象
                                        $accessToken = json_decode(file_get_contents($access_token_url));
                                         
                                        if (isset($accessToken->errcode)) 
                                            {
                                                $data[&#39;errorno&#39;]=$token->errcode;
                                                $data[&#39;errormsg&#39;]=$token->errmsg;
                                            }
                                            else
                                                {
     $user_info_url = &#39;https://api.weixin.qq.com/sns/userinfo?access_token=&#39;.$accessToken->access_token.&#39;&openid=&#39;.$accessToken->openid.&#39;&lang=zh_CN&#39;;
                                                    //转成对象
                                                    $userInfo = json_decode(file_get_contents($user_info_url));
                                                     
                                                    if (isset($userInfo->errcode)) 
                                                        {
                                                            $data[&#39;errorno&#39;]=$token->errcode;
                                                            $data[&#39;errormsg&#39;]=$token->errmsg;
                                                        }
                                                        else
                                                            {
                                                                $data[&#39;data&#39;]=$userInfo;
                                                            }
                                                }
                                    }
                        }
                return $data;
            }
             
    }
 
?>
Copier après la connexion
<?php
/******
 
    用于企业向微信用户个人发现金红包
    目前支持向指定微信用户的openid发放指定金额红包。
    (获取openid参见微信公众平台开发者文档:
    网页授权获取用户基本信息)
     
****/
namespace RedClient\Redpack;
 
class SendRedPack
    {
        private $config=array(
            &#39;nonce_str&#39;=>&#39;&#39;,//随机字符串,不长于32位
            &#39;sign&#39;=>&#39;&#39;,//签名
            &#39;mch_billno&#39;=>&#39;&#39;,//商户订单号
            &#39;mch_id&#39;=>&#39;1111sdfsafsaddf&#39;,//微信支付分配的商户号
            &#39;wxappid&#39;=>&#39;sddafdsadfdsafdsdd&#39;,//微信分配的公众账号ID
            &#39;send_name&#39;=>&#39;&#39;,//红包发送者名称
            &#39;re_openid&#39;=>&#39;&#39;,//接受红包的用户,用户在wxappid下的openid
            &#39;total_amount&#39;=>&#39;&#39;,//付款金额,单位分
            &#39;total_num&#39;=>&#39;&#39;,//红包发放总人数
            &#39;wishing&#39;=>&#39;&#39;,//红包祝福语
            &#39;client_ip&#39;=>&#39;&#39;,//调用接口的机器Ip地址
            &#39;act_name&#39;=>&#39;&#39;,//活动名称
            &#39;remark&#39;=>&#39;&#39;,//  备注信息
        );
         
        protected $key=&#39;&#39;;
        protected $url=&#39;https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack&#39;;
        protected $requestXml=&#39;&#39;;
         
        //设置必要参数
        public function setFields($conf=array())
            {
                foreach($conf as $k=>$v)
                    {
                        if(isset($this->config[$k]) && !empty($v))
                            {
                                $this->config[$k]=$v;
                            }
                    }
                $this->config[&#39;mch_billno&#39;]=$this->billno();
                $this->config[&#39;nonce_str&#39;]=$this->createNonceStr();
                $this->createSign($conf);
                $this->createXml();
                //echo $this->requestXml;
            }
         
        protected function billno()
            {
                return $this->config[&#39;mch_id&#39;].time().md5(mt_rand(1000,9999));
            }
         
        /* //检查必要参数是否为空!
        public function checkConfig()
            {
                $flag=true;
                foreach($this->config as $k=>$v)
                    {
                        if(empty($v))
                            {
                                $flag=false;
                                break;
                            }
                    }
            } */
         
        //随机字符串,不长于32位
        public function createNonceStr( $len=32 )
            {
                $strs = "abcdefghijklmnopqrstuvwxyz0123456789";
                $str ="";
                $len=$len<=32?$len:32;
                for ( $i = 0; $i < $len; $i++ )
                    {
                      $str.= substr($strs, mt_rand(0, strlen($strs)-1), 1);
                    }
                return $str;
            }
             
        //格式化参数
        public function formatParam($config=array(),$flag=1)
            {
                $format=&#39;&#39;;
                if(!empty($config))
                    {
                        ksort($config);
                        foreach($config as $k=>$v)
                            {
                                if($flag)
                                    {
                                        $v=urlencode($v);
                                    }
                                     
                                    if($flag==0 && strtolower($k)==&#39;sign&#39;)
                                        {
                                            continue;
                                        }
                                $format.=$k.&#39;=&#39;.$v.&#39;&&#39;;
                            }
                        $format=trim($format,&#39;&&#39;);
                    }
                return $format;
            }
             
        //创建SIGNATURE  
        protected function createSign($config)
            {
                $format=$this->formatParam($config,0);
                $format.=&#39;&key=&#39;.$this->key;
                $signature=strtoupper(md5($format));
                $this->config[&#39;sign&#39;]=$signature;
                return true;//$signature;
            }
             
        //创建xml格式数据
        protected function createXml()
            {
                $xml=&#39;<xml>&#39;;
                foreach($this->config as $k=>$v)
                    {
                        if(!empty($v))
                            {
                                $xml.=&#39;<&#39;.$k.&#39;><![CDATA[&#39;.$v.&#39;]]></&#39;.$k.&#39;>&#39;;
                            }
                    }
                $xml.=&#39;</xml>&#39;;
                $this->requestXml=$xml;
            }
         
        //XML格式数据转换为数组
        public function createArray($xml=&#39;&#39;)
            {
                $arr = json_decode(json_encode(simplexml_load_string($xml, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA)), true);
                return $arr;
            }
         
        //发送红包
        public function requestXml($timeout=30,$header=array())
            {
                $ch = curl_init();
                //超时时间
                curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
                curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch,CURLOPT_URL,$this->url);
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
                curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
                //默认格式为PEM,可以注释
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
                curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).&#39;/apiclient_cert.pem&#39;);//pem证书地址
                //默认格式为PEM,可以注释
                curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
                curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).&#39;/apiclient_key.pem&#39;);//key证书地址
                curl_setopt($ch,CURLOPT_CAINFO,&#39;PEM&#39;);
                curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).&#39;/rootca.pem&#39;);//CA证书地址
                //两个文件合成一个.pem文件
                //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/all.pem&#39;);
                if( count($header) >= 1 )
                    {
                        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                    }
                curl_setopt($ch,CURLOPT_POST, 1);
                curl_setopt($ch,CURLOPT_POSTFIELDS,$this->requestXml);
                $data = curl_exec($ch);
                var_dump($data);
                if($data)
                    {
                        curl_close($ch);
                        var_dump($data);
                        return $data;
                    }
                    else 
                        {
                            $error = curl_errno($ch);
                            echo &#39;ERROR:&#39;.$error;
                            curl_close($ch);
                            return false;
                        }
            }
         
        //返回非空值,非NULL
        public function notEmpty($val=&#39;&#39;)
            {
                $return=&#39;&#39;;
                if(null !=$val && strlen($val) != 0)
                    {
                        $return=$val;
                    }
                return $return?$return:false;
            }
         
    }
 
 
?>
Copier après la connexion
<?php
namespace RedClient\Redpack;
class WeiXinInfo
    {
        private $AppID=&#39;appid&#39;;
        private $AppSecret=&#39;secret&#39;;
        private $grant_type=&#39;client_credential&#39;;
         
        private $url=&#39;https://api.weixin.qq.com/cgi-bin/token&#39;;
         
        public function __construct()
            {
                //$arr=array(&#39;access_token&#39;=>&#39;1&#39;,&#39;expires&#39;=>&#39;7200&#39;);
                 
            }
             
        //设置获取ACCESSTOKEN 的URL
        public function setUrl()
            {
                return $this->url=$this->url.&#39;?grant_type=&#39;.$this->grant_type.&#39;&appid=&#39;.$this->AppID.&#39;&secret=&#39;.$this->AppSecret;
            }
         
        //获取APPID,SECRET
        public function getAppid()
            {
                $sql=&#39;select appid,secret from ly_appid where flag=1&#39;;
                $model=M();
                $result=$model->query($sql);
                if(!empty($result))
                    {
                        $this->AppID=$result[0][&#39;appid&#39;];
                        $this->AppSecret=$result[0][&#39;secret&#39;];
                        return $result[0];
                    }
            }
             
        public function object2array($object) 
            {
              if (is_object($object)) 
                  {
                    foreach ($object as $key => $value) 
                        {
                          $array[$key] = $value;
                        }
                  }
                  else 
                      {
                        $array = $object;
                      }
              return $array;
            }
             
        //检验URL有效
        public function checkUrl()
            {
                $signature=isset($_GET[&#39;signature&#39;])?strip_tags(trim($_GET[&#39;signature&#39;])):&#39;&#39;;
                $timestamp=isset($_GET[&#39;timestamp&#39;])?strip_tags(trim($_GET[&#39;timestamp&#39;])):&#39;&#39;;
                $nonce=isset($_GET[&#39;nonce&#39;])?strip_tags(trim($_GET[&#39;nonce&#39;])):&#39;&#39;;
                $echostr=isset($_GET[&#39;echostr&#39;])?$_GET[&#39;echostr&#39;]:&#39;&#39;;
                if(!empty($signature) && !empty($timestamp) && !empty($nonce))
                    {
                        if($this->checkSign($signature,$timestamp,$nonce))
                            {
                                echo $echostr;
                                return true;
                            }
                            else
                                {
                                    return false;
                                }
                    }
            }  
             
        //验证SIGNATURE是否有效
        private function checkSign($sign,$timestamp,$nonce)
            {
                $token=$this->getAccessToken();
                //$token=$this->object2array($token);
                $sign_arr=array($token,$timstamp,$nonce);
                sort($sign_arr,SORT_STRING);
                $signStr=implode($sign_arr);
                $signStr=sha1($signStr);
                if(strtoupper($signStr)==strtoupper($sign))
                    {
                        return true;
                    }
                return false;
            }
             
        //通过微信接口获取微信Access_Token   
        public function getAccessToken()
            {
                $token=&#39;&#39;;
                $this->setUrl();
                $check=$this->checkToken();
                 
                if(session(&#39;?&#39;.md5(&#39;getaccesstoken&#39;)) && $check)
                    {
                        $tokens=session(md5(&#39;getaccesstoken&#39;));
                        $token=$tokens->access_token;
                    }
                    else
                        {
                            $result=file_get_contents($this->url);
                            $result=json_decode($result);
                            $token=$result->access_token;
                            $result->expires_in=$result->expires_in+time();
                            session(md5(&#39;getaccesstoken&#39;),$result);
                        }
                         
                return $token;
            }
         
        //检查微信ACCESS_TOKEN是否有效
        public function checkToken()
            {
                if(session(&#39;?&#39;.md5(&#39;getaccesstoken&#39;)) && session(md5(&#39;getaccesstoken&#39;)))
                    {
                        $time=time();
                        $token=session(md5(&#39;getaccesstoken&#39;));
                         
                        if($token->expires_in-$time > 30)
                            {
                                return true;
                            }
                            else
                                {
                                    session(md5(&#39;getaccesstoken&#39;),null);
                                }
                    }
                return false;
            }
             
        //保存微信ACCESSTOKEN到数据库  
        public function saveAccessToken()
            {
                $token=$this->getAccessToken();
                $sql=&#39;select `id`,`rate`,token,ex_time,createtime from ly_token where token="&#39;.$token.&#39;" where appid="&#39;.$this->AppID.&#39;" AND secret="&#39;.$this->AppSecret.&#39;"&#39;;
                $model=M();
                $result=$model->query($sql);
                if(!empty($result))
                    {
                        $time=time();
                        $expires=$time-$result[0][&#39;createtime&#39;];
                        if($result[0][&#39;ex_time&#39;]-$expires > 0)
                            {
                                return $result[0][&#39;token&#39;];                       
                            }
                            else
                                {
                                    $token=$this->getAccessToken();
                                    if(!empty($token))
                                        {
                                            $token=json_decode($token);
                                            if(!isset($token[&#39;errcode&#39;]) or !$token[&#39;errcode&#39;])
                                                {
                                                    if(isset($token[&#39;access_token&#39;]) && $token[&#39;access_token&#39;])
                                                        {
                                                            $data[&#39;access_token&#39;]=$token[&#39;access_token&#39;];
                                                            $data[&#39;createtime&#39;]=$time;
                                                            $data[&#39;ex_time&#39;]=$token[&#39;expires_in&#39;];
                                                            $data[&#39;rate&#39;]=$result[0][&#39;rate&#39;]+1;
                                                            //$sql=&#39;update ly_token set token="&#39;.$token[&#39;access_token&#39;].&#39;" ,createtime=&#39;.$time.&#39;,ex_time=&#39;.$token[&#39;expires_in&#39;].&#39; where `id`=&#39;.$result[0][&#39;id&#39;];
                                                            $model=M(&#39;token&#39;);
                                                            $update=$model->where(&#39;`id`=&#39;.$result[0][&#39;id&#39;])->save($data);
                                                            if($update)
                                                            {
                                                                return $token[&#39;access_token&#39;];
                                                            }
                                                        }
                                                }
                                                else
                                                    {//微信返回的错误信息
                                                                $data[&#39;errcode&#39;]=$token[&#39;errcode&#39;];
                                                                $data[&#39;errmsg&#39;]=$token[&#39;errmsg&#39;];
                                                                $data[&#39;appid&#39;]=$this->AppID;
                                                                $data[&#39;secret&#39;]=$this->AppSecret;
                                                                $data[&#39;createtime&#39;]=time();
                                                                $data[&#39;rate&#39;]=$result[0][&#39;rate&#39;]+1;
                                                                $ein=$model->where(&#39;`id`=&#39;.$result[0][&#39;id&#39;])->save($data);
                                                                if($ein)
                                                                    {
                                                                        return false;
                                                                    }
                                                    }
                                        }
                                }
                    }
                    else
                        {//新插入数据库保存
                            $token=$this->getAccessToken();
                            $model=M(&#39;token&#39;);
                            if(!empty($token))
                                        {
                                            $data=array();
                                            $token=json_decode($token);
                                            if(!isset($token[&#39;errcode&#39;]) or !$token[&#39;errcode&#39;])
                                                {
                                                    if(isset($token[&#39;access_token&#39;]) && $token[&#39;access_token&#39;])
                                                        {
                                                            $data[&#39;access_token&#39;]=$token[&#39;access_token&#39;];
                                                            $data[&#39;createtime&#39;]=$time;
                                                            $data[&#39;ex_time&#39;]=$token[&#39;expires_in&#39;];
                                                            //$sql=&#39;insert into ly_token() vlaues()&#39;;
                                                            $data[&#39;rate&#39;]=1;
                                                            $in=$model->data($data)->add();
                                                            if($ein)
                                                            {
                                                                $token[&#39;access_token&#39;];
                                                            }
                                                        }
                                                }
                                                else
                                                    {//微信返回的错误信息
                                                        $data[&#39;errcode&#39;]=$token[&#39;errcode&#39;];
                                                        $data[&#39;errmsg&#39;]=$token[&#39;errmsg&#39;];
                                                        $data[&#39;appid&#39;]=$this->AppID;
                                                        $data[&#39;secret&#39;]=$this->AppSecret;
                                                        $data[&#39;createtime&#39;]=time();
                                                        $data[&#39;rate&#39;]=1;
                                                        $ein=$model->data($data)->add();
                                                        if($ein)
                                                            {
                                                                return false;
                                                            }
                                                    }
                                        }
                        }
                return false;
            }  
             
             
             
             
             
    }
 
?>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

OUYI Exchange App Download Download Tutorial OUYI Exchange App Download Download Tutorial Mar 21, 2025 pm 05:42 PM

Cet article fournit un guide détaillé pour le téléchargement en toute sécurité de l'application OUYI OKX en Chine. En raison des restrictions sur les magasins d'applications nationales, il est conseillé aux utilisateurs de télécharger l'application via le site officiel d'Ouyi OKX, ou d'utiliser le code QR fourni par le site officiel pour analyser et télécharger. Pendant le processus de téléchargement, assurez-vous de vérifier l'adresse officielle du site Web, de consulter les autorisations d'application, d'effectuer une analyse de sécurité après l'installation et d'activer la vérification à deux facteurs. Pendant l'utilisation, veuillez respecter les lois et réglementations locales, utiliser un environnement de réseau sûr, protéger la sécurité des comptes, être vigilant contre la fraude et investir rationnellement. Cet article est pour référence uniquement et ne constitue pas des conseils d'investissement.

La différence entre H5 et mini-programmes et applications La différence entre H5 et mini-programmes et applications Apr 06, 2025 am 10:42 AM

H5. La principale différence entre les mini programmes et l'application est: Architecture technique: H5 est basé sur la technologie Web, et les mini-programmes et l'application sont des applications indépendantes. Expérience et fonctions: H5 est légère et facile à utiliser, avec des fonctions limitées; Les mini-programmes sont légers et ont une bonne interactivité; Les applications sont puissantes et ont une expérience fluide. Compatibilité: H5 est compatible multiplateforme, les applets et les applications sont limités par la plate-forme. Coût de développement: H5 a un faible coût de développement, des mini-programmes moyens et une application la plus élevée. Scénarios applicables: H5 convient à l'affichage d'informations, les applets conviennent aux applications légères et les applications conviennent aux fonctions complexes.

Quelle est la différence entre la production de pages H5 et les applets WeChat Quelle est la différence entre la production de pages H5 et les applets WeChat Apr 05, 2025 pm 11:51 PM

H5 est plus flexible et personnalisable, mais nécessite une technologie qualifiée; Les mini-programmes sont rapides à démarrer et faciles à entretenir, mais sont limités par le cadre WeChat.

Que dois-je faire si le logiciel de sécurité de l'entreprise est en conflit avec les applications? Comment dépanner les logiciels de sécurité des teintes provoque l'ouverture des logiciels communs? Que dois-je faire si le logiciel de sécurité de l'entreprise est en conflit avec les applications? Comment dépanner les logiciels de sécurité des teintes provoque l'ouverture des logiciels communs? Apr 01, 2025 pm 10:48 PM

Problèmes de compatibilité et méthodes de dépannage pour les logiciels et applications de sécurité de l'entreprise. De nombreuses entreprises installeront des logiciels de sécurité afin d'assurer la sécurité intranet. Cependant, les logiciels de sécurité parfois ...

Comment choisir H5 et Applets Comment choisir H5 et Applets Apr 06, 2025 am 10:51 AM

Le choix de H5 et Applet dépend des exigences. Pour les applications avec une plate-forme multiplateuse, un développement rapide et une éleve élevée, choisissez H5; Pour les applications avec une expérience native, des fonctions riches et des dépendances de plate-forme, choisissez des applets.

Comment résoudre le problème de la mise en cache des ressources JS dans l'entreprise WeChat? Comment résoudre le problème de la mise en cache des ressources JS dans l'entreprise WeChat? Apr 04, 2025 pm 05:06 PM

Discussion sur le numéro de mise en cache des ressources JS d'Enterprise WeChat. Lors de la mise à niveau des fonctions du projet, certains utilisateurs rencontrent souvent des situations où ils ne parviennent pas à mettre à niveau avec succès, en particulier dans l'entreprise ...

Tutoriel détaillé sur la façon d'acheter et de vendre une monnaie virtuelle de binance Tutoriel détaillé sur la façon d'acheter et de vendre une monnaie virtuelle de binance Mar 18, 2025 pm 01:36 PM

Cet article fournit un bref guide pour l'achat et la vente de monnaie virtuelle de binance mise à jour en 2025 et explique en détail les étapes de fonctionnement des transactions de devises virtuelles sur la plate-forme de binance. Le guide couvre l'achat de monnaie Fiat USDT, l'achat de transactions en devises d'autres devises (tels que BTC) et les opérations de vente, y compris le trading du marché et la limite de trading. En outre, le guide rappelle également spécifiquement les risques clés tels que la sécurité des paiements et la sélection du réseau pour les transactions de monnaie fiduciaire, aidant les utilisateurs à effectuer des transactions de binance en toute sécurité et efficacement. Grâce à cet article, vous pouvez rapidement maîtriser les compétences de l'achat et de la vente de monnaies virtuelles sur la plate-forme Binance et de réduire les risques de transaction.

Le premier hominidé numérique culturel et touristique double cœur du pays! Tencent Cloud aide Huaguoshan Scenic Area Le premier hominidé numérique culturel et touristique double cœur du pays! Tencent Cloud aide Huaguoshan Scenic Area Mar 12, 2025 pm 12:57 PM

Le quartier panoramique de Lianyungang Huaguoshan se joint à Tencent Cloud pour lancer le premier homo numérique "à double cœur" Homo Sapiens dans l'industrie culturelle et touristique - Monkey King! Le 1er mars, l'endroit pittoresque a officiellement connecté le King Monkey à la plate-forme Deepseek, de sorte qu'il a les deux capacités de modèle d'IA de Tencent Hunyuan et Deepseek, apportant aux touristes une expérience de service plus intelligente et plus prévenante. Huaguoshan Scenic Area a précédemment lancé le Roi singe du Digital Homo Sapiens basé sur le modèle Tencent Hunyuan. Cette fois, Tencent Cloud utilise en outre des technologies telles que le moteur de connaissances Big Model pour le connecter à Deepseek pour obtenir une mise à niveau "double core". Cela rend la capacité interactive du singe à un niveau supérieur, une vitesse de réponse plus rapide, une capacité de compréhension plus forte et plus de chaleur. Monkey King a de fortes capacités de traitement du langage naturel et peut comprendre diverses façons de poser des questions aux touristes.

See all articles