溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

微信開(kāi)發(fā)之現(xiàn)金紅包接口如何實(shí)現(xiàn)紅包發(fā)放功能

發(fā)布時(shí)間:2021-03-12 09:41:13 來(lái)源:億速云 閱讀:254 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章給大家分享的是有關(guān) 微信開(kāi)發(fā)之現(xiàn)金紅包接口如何實(shí)現(xiàn)紅包發(fā)放功能的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

微信現(xiàn)金紅包接口實(shí)現(xiàn)紅包發(fā)放:

一:流程:【

流程:微信用戶(hù)訪問(wèn)紅包活動(dòng)頁(yè)面--》后端判斷是否是微信訪問(wèn)的

【否:提示用微信打開(kāi)連接,是:提示用戶(hù)是否授權(quán)允許,獲取其的用戶(hù)信息【openID等信息】】--》

進(jìn)入紅包活動(dòng)頁(yè)面---》用戶(hù)點(diǎn)擊領(lǐng)取紅包【判斷是否領(lǐng)取過(guò)紅包】是:【提示已領(lǐng)取過(guò)紅包】否

--》后端程序調(diào)用接口發(fā)放紅包

--》微信用戶(hù)在微信中收到紅包

--》打開(kāi)紅包

--》紅包金額會(huì)添加到錢(qián)包零錢(qián)里

--》完成紅包發(fā)放。

二:要實(shí)現(xiàn)微信現(xiàn)金紅包接口實(shí)現(xiàn)紅包發(fā)放,首先要符合以下條件:

1.用于發(fā)放紅包的微信公眾號(hào)要是服務(wù)類(lèi)型

2.登錄微信公眾平臺(tái)官網(wǎng)后,在公眾平臺(tái)后臺(tái)管理頁(yè)面 - 開(kāi)發(fā)者中心頁(yè),

點(diǎn)擊“修改配置”按鈕,填寫(xiě)服務(wù)器地址(URL)、Token和EncodingAESKey,

其中URL是開(kāi)發(fā)者用來(lái)接收微信消息和事件的接口URL。Token可由開(kāi)發(fā)者可以任意填寫(xiě),

用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性)。

EncodingAESKey由開(kāi)發(fā)者手動(dòng)填寫(xiě)或隨機(jī)生成,將用作消息體加解密密鑰。

3.獲取access_token:公眾號(hào)可以使用AppID和AppSecret調(diào)用本接口來(lái)獲取access_token。

【AppID和AppSecret可在微信公眾平臺(tái)官網(wǎng)-開(kāi)發(fā)者中心頁(yè)中獲得(需要已經(jīng)成為開(kāi)發(fā)者,且?guī)ぬ?hào)沒(méi)有異常狀態(tài))。】

4.微信公眾號(hào)要開(kāi)通 “網(wǎng)頁(yè)授權(quán)接口” 用戶(hù)獲取用戶(hù)基本信息【特別是openID ,發(fā)紅包時(shí)用到】

5.微信公眾號(hào)的 “微信支付“  中的  ”商戶(hù)號(hào)” 要開(kāi)通微信支付【發(fā)紅包的金額是該支付賬戶(hù)扣款】,開(kāi)通“現(xiàn)金紅包”接口【調(diào)用該接口發(fā)放紅包】。

6. 登陸 ”商戶(hù)號(hào)”【微信公眾號(hào)分配的商戶(hù)號(hào)。第5 中有說(shuō)明】 在 “API安全” 中 下載PHP版的 證書(shū) 【.pem格式】

以上如描述不清楚,請(qǐng)查看 微信開(kāi)發(fā)者文檔 里面有詳細(xì)的秒殺。

部分代碼如下【其余的請(qǐng)查看附件】:

<?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();//是否是微信打開(kāi)
                if($this->access)
                    {
                        $this->display();
                         
                    }
                    else
                        {
                            $class=new Oauth();
                            $class->index('http://www.myweb.com/index.php/Index/oauth');
                        }
            }
         
        //獲取用戶(hù)信息 openID
        public function oauth()
            {
                $code=isset($_GET['code'])?strip_tags(trim($_GET['code'])):'';
                $state=isset($_GET['state'])?strip_tags(trim($_GET['state'])):'';
                 
                $class=new Oauth();
                $userInfo=$class->getCode($code,$state);//獲取用戶(hù)信息
                if(!empty($userInfo['data']))
                    {
                        //$model=M('wxuser');
                        //$result=$model->where('openid = "'.$userInfo['data']->openid.'"')->field('openid')->select();
                        if(empty($result))
                            {
                                $userInfo['data']=$this->object2array($userInfo['data']);
                                $model->data($userInfo['data'])->add();
                                 
                            }
                    }
                $userInfo['data']=$this->object2array($userInfo['data']);
                 
                //創(chuàng)建紅包
                $class=new CreateRedPack();
                $red=$class->redval();
                 
                //發(fā)紅包
                $class=new SendRedPack();
                $configs=array(
                        'send_name'=>'紅包發(fā)送者名稱(chēng)',//紅包發(fā)送者名稱(chēng)
                        're_openid'=>$userInfo['data']['openid'],//接受紅包的用戶(hù),用戶(hù)在wxappid下的openid
                        'total_amount'=>$red,//付款金額,單位分
                        'total_num'=>'1',//紅包發(fā)放總?cè)藬?shù)
                        'wishing'=>'紅包祝福語(yǔ)',//紅包祝福語(yǔ)
                        'client_ip'=>$_SERVER['SERVER_ADDR'],//調(diào)用接口的機(jī)器Ip地址
                        'act_name'=>'活動(dòng)名稱(chēng)',//活動(dòng)名稱(chēng)
                        'remark'=>'備注信息',//  備注信息
                    );
                $class->setFields($configs);
                $result=$class->requestXml();
                 
                //微信返回信息處理
                if(strtoupper($result['return_code'])=='SUCCESS')
                    {
                        if(strtoupper($result['result_code'])=='SUCCESS')
                            {
                                //紅包發(fā)送成功!
                                                         
                                $datas['flag']=1;
                                echo $result['err_code_des'];
                            }
                            else
                                {
                                    //紅包發(fā)送失敗
                                    $datas['flag']=0;
                                    $datas['msg']=$result['err_code_des'];
                                    echo $result['err_code_des'];
                                }
                    }
                    else
                        {
                            //紅包發(fā)送失敗
                            $datas['flag']=0;
                            $datas['msg']=$result['err_code_des'];
                            echo $result['err_code_des'];
                        }
            }
         
        public function isWeixin()
            {
                if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) 
                    { 
                        $this->access=true; 
                    } 
                return false; 
            }
         
        //類(lèi)轉(zhuǎn)換成數(shù)組
        public function object2array($object) 
            {
              if (is_object($object)) 
                  {
                    foreach ($object as $key => $value) 
                        {
                          $array[$key] = $value;
                        }
                  }
                  else 
                      {
                        $array = $object;
                      }
              return $array;
            }
             
    }
    ?>
<?php
namespace RedClient\Redpack;
/**
    簡(jiǎn)單紅包算法類(lèi)
**/
class CreateRedPack
    {
        private $rid=0;//當(dāng)前紅包隨機(jī)數(shù)
        private $rand_arr=array();//35%是1.0到1.1 紅包隨機(jī)數(shù)
        private $rand_arr1=array();//35%是1.1到1.2 紅包隨機(jī)數(shù)
        private $rand_arr2=array();//30%是1.2到1.95 紅包隨機(jī)數(shù)
        private $red=0;//紅包金額
        private $simplered=0;
        private $red_config=array(
                                array('min'=>1.0,'max'=>1.1),
                                array('min'=>1.1,'max'=>1.2),
                                array('min'=>1.2,'max'=>1.95)
                            );
                             
        public function __construct()
            {
                $this->rid=mt_rand(1,10000);//當(dāng)前紅包隨機(jī)數(shù)
                $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();//隨機(jī)最大紅包金額
                if($maxrp!=$this->simplered)
                    {
                        if(in_array($this->rid,$this->rand_arr))
                            {
                                $red_val=$this->red_config[0];
                                $min=$red_val['min']*100;
                                $max=$red_val['max']*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['min']*100;
                                    $max=$red_val['max']*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['min']*100;
                                        $max=$red_val['max']*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;
            }
    }
 
?>
<?php
namespace RedClient\Redpack;
/*********
 
    先在公共平臺(tái)配置授權(quán)的域名;
    然后才能通過(guò),
    網(wǎng)頁(yè)授權(quán)方式獲取微信用戶(hù)基本信息
     
    網(wǎng)頁(yè)授權(quán)流程分為四步: 
 
    1.引導(dǎo)用戶(hù)進(jìn)入授權(quán)頁(yè)面同意授權(quán),獲取code 
    2.通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token(與基礎(chǔ)支持中的access_token不同) 
    3.如果需要,開(kāi)發(fā)者可以刷新網(wǎng)頁(yè)授權(quán)access_token,避免過(guò)期 
    4.通過(guò)網(wǎng)頁(yè)授權(quán)access_token和openid獲取用戶(hù)基本信息 
 
**********/
class Oauth
    {
        protected $appid='';
        protected $redirect_uri='';
        protected $state='';//mt_rand(100,999);
        protected $appsecret='';
        protected $data=array('flag'=>0,'msg'=>'','data'=>'');
         
         
        public function __construct()
            {
                $this->appid='appid';//
                $this->appsecret='secret';//;
                $this->state=mt_rand(100,999);
            }
             
        //引導(dǎo)用戶(hù)訪問(wèn)鏈接處理函數(shù) 
        public function index($redirect_uri)
            {
                $this->redirect_uri=urlencode($redirect_uri);//微信自動(dòng)跳轉(zhuǎn)到$redirect_uri
                header('location:https://open.weixin.qq.com/connect/oauth3/authorize?appid='.$this->appid.'&redirect_uri='.$this->redirect_uri.'/oauth.php&response_type=code&scope=snsapi_userinfo&state='.$this->state.'&connect_redirect=1#wechat_redirect');
            }
             
        public function getCode($code='',$state='',$token='',$webToken='')
            {
                $data=array(
                    'errorno'=>'',
                    'errormsg'=>'',
                    'data'=>''
                );
                 
                if(empty($code))
                    {
                        $this->data['flag']=0;
                        $this->data['msg']='授權(quán)失敗!';
                    }
                    else
                        {   /* 
                                 
                                1獲取webtoken
                                2獲取reflash_token
                                3獲取用戶(hù)信息 
                            */
  $token_url = 'https://api.weixin.qq.com/sns/oauth3/access_token?appid='.$this->appid.'&secret='.$this->appsecret.'&code='.$code.'&grant_type=authorization_code';
                         $token = json_decode(file_get_contents($token_url));
                             
                            if (isset($token->errcode)) 
                                {
                                    $data['errorno']=$token->errcode;
                                    $data['errormsg']=$token->errmsg;
                                }
                                else
                                    {
  $access_token_url = 'https://api.weixin.qq.com/sns/oauth3/refresh_token?appid='.$this->appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
                                        //轉(zhuǎn)成對(duì)象
                                        $accessToken = json_decode(file_get_contents($access_token_url));
                                         
                                        if (isset($accessToken->errcode)) 
                                            {
                                                $data['errorno']=$token->errcode;
                                                $data['errormsg']=$token->errmsg;
                                            }
                                            else
                                                {
     $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$accessToken->access_token.'&openid='.$accessToken->openid.'&lang=zh_CN';
                                                    //轉(zhuǎn)成對(duì)象
                                                    $userInfo = json_decode(file_get_contents($user_info_url));
                                                     
                                                    if (isset($userInfo->errcode)) 
                                                        {
                                                            $data['errorno']=$token->errcode;
                                                            $data['errormsg']=$token->errmsg;
                                                        }
                                                        else
                                                            {
                                                                $data['data']=$userInfo;
                                                            }
                                                }
                                    }
                        }
                return $data;
            }
             
    }
 
?>
<?php
/******
 
    用于企業(yè)向微信用戶(hù)個(gè)人發(fā)現(xiàn)金紅包
    目前支持向指定微信用戶(hù)的openid發(fā)放指定金額紅包。
    (獲取openid參見(jiàn)微信公眾平臺(tái)開(kāi)發(fā)者文檔:
    網(wǎng)頁(yè)授權(quán)獲取用戶(hù)基本信息)
     
****/
namespace RedClient\Redpack;
 
class SendRedPack
    {
        private $config=array(
            'nonce_str'=>'',//隨機(jī)字符串,不長(zhǎng)于32位
            'sign'=>'',//簽名
            'mch_billno'=>'',//商戶(hù)訂單號(hào)
            'mch_id'=>'1111sdfsafsaddf',//微信支付分配的商戶(hù)號(hào)
            'wxappid'=>'sddafdsadfdsafdsdd',//微信分配的公眾賬號(hào)ID
            'send_name'=>'',//紅包發(fā)送者名稱(chēng)
            're_openid'=>'',//接受紅包的用戶(hù),用戶(hù)在wxappid下的openid
            'total_amount'=>'',//付款金額,單位分
            'total_num'=>'',//紅包發(fā)放總?cè)藬?shù)
            'wishing'=>'',//紅包祝福語(yǔ)
            'client_ip'=>'',//調(diào)用接口的機(jī)器Ip地址
            'act_name'=>'',//活動(dòng)名稱(chēng)
            'remark'=>'',//  備注信息
        );
         
        protected $key='';
        protected $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
        protected $requestXml='';
         
        //設(shè)置必要參數(shù)
        public function setFields($conf=array())
            {
                foreach($conf as $k=>$v)
                    {
                        if(isset($this->config[$k]) && !empty($v))
                            {
                                $this->config[$k]=$v;
                            }
                    }
                $this->config['mch_billno']=$this->billno();
                $this->config['nonce_str']=$this->createNonceStr();
                $this->createSign($conf);
                $this->createXml();
                //echo $this->requestXml;
            }
         
        protected function billno()
            {
                return $this->config['mch_id'].time().md5(mt_rand(1000,9999));
            }
         
        /* //檢查必要參數(shù)是否為空!
        public function checkConfig()
            {
                $flag=true;
                foreach($this->config as $k=>$v)
                    {
                        if(empty($v))
                            {
                                $flag=false;
                                break;
                            }
                    }
            } */
         
        //隨機(jī)字符串,不長(zhǎng)于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;
            }
             
        //格式化參數(shù)
        public function formatParam($config=array(),$flag=1)
            {
                $format='';
                if(!empty($config))
                    {
                        ksort($config);
                        foreach($config as $k=>$v)
                            {
                                if($flag)
                                    {
                                        $v=urlencode($v);
                                    }
                                     
                                    if($flag==0 && strtolower($k)=='sign')
                                        {
                                            continue;
                                        }
                                $format.=$k.'='.$v.'&';
                            }
                        $format=trim($format,'&');
                    }
                return $format;
            }
             
        //創(chuàng)建SIGNATURE  
        protected function createSign($config)
            {
                $format=$this->formatParam($config,0);
                $format.='&key='.$this->key;
                $signature=strtoupper(md5($format));
                $this->config['sign']=$signature;
                return true;//$signature;
            }
             
        //創(chuàng)建xml格式數(shù)據(jù)
        protected function createXml()
            {
                $xml='<xml>';
                foreach($this->config as $k=>$v)
                    {
                        if(!empty($v))
                            {
                                $xml.='<'.$k.'><![CDATA['.$v.']]></'.$k.'>';
                            }
                    }
                $xml.='</xml>';
                $this->requestXml=$xml;
            }
         
        //XML格式數(shù)據(jù)轉(zhuǎn)換為數(shù)組
        public function createArray($xml='')
            {
                $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
                return $arr;
            }
         
        //發(fā)送紅包
        public function requestXml($timeout=30,$header=array())
            {
                $ch = curl_init();
                //超時(shí)時(shí)間
                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);
                //默認(rèn)格式為PEM,可以注釋
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/apiclient_cert.pem');//pem證書(shū)地址
                //默認(rèn)格式為PEM,可以注釋
                curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/apiclient_key.pem');//key證書(shū)地址
                curl_setopt($ch,CURLOPT_CAINFO,'PEM');
                curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/rootca.pem');//CA證書(shū)地址
                //兩個(gè)文件合成一個(gè).pem文件
                //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
                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 'ERROR:'.$error;
                            curl_close($ch);
                            return false;
                        }
            }
         
        //返回非空值,非NULL
        public function notEmpty($val='')
            {
                $return='';
                if(null !=$val && strlen($val) != 0)
                    {
                        $return=$val;
                    }
                return $return?$return:false;
            }
         
    }
 
 
?>
<?php
namespace RedClient\Redpack;
class WeiXinInfo
    {
        private $AppID='appid';
        private $AppSecret='secret';
        private $grant_type='client_credential';
         
        private $url='https://api.weixin.qq.com/cgi-bin/token';
         
        public function __construct()
            {
                //$arr=array('access_token'=>'1','expires'=>'7200');
                 
            }
             
        //設(shè)置獲取ACCESSTOKEN 的URL
        public function setUrl()
            {
                return $this->url=$this->url.'?grant_type='.$this->grant_type.'&appid='.$this->AppID.'&secret='.$this->AppSecret;
            }
         
        //獲取APPID,SECRET
        public function getAppid()
            {
                $sql='select appid,secret from ly_appid where flag=1';
                $model=M();
                $result=$model->query($sql);
                if(!empty($result))
                    {
                        $this->AppID=$result[0]['appid'];
                        $this->AppSecret=$result[0]['secret'];
                        return $result[0];
                    }
            }
             
        public function object2array($object) 
            {
              if (is_object($object)) 
                  {
                    foreach ($object as $key => $value) 
                        {
                          $array[$key] = $value;
                        }
                  }
                  else 
                      {
                        $array = $object;
                      }
              return $array;
            }
             
        //檢驗(yàn)URL有效
        public function checkUrl()
            {
                $signature=isset($_GET['signature'])?strip_tags(trim($_GET['signature'])):'';
                $timestamp=isset($_GET['timestamp'])?strip_tags(trim($_GET['timestamp'])):'';
                $nonce=isset($_GET['nonce'])?strip_tags(trim($_GET['nonce'])):'';
                $echostr=isset($_GET['echostr'])?$_GET['echostr']:'';
                if(!empty($signature) && !empty($timestamp) && !empty($nonce))
                    {
                        if($this->checkSign($signature,$timestamp,$nonce))
                            {
                                echo $echostr;
                                return true;
                            }
                            else
                                {
                                    return false;
                                }
                    }
            }  
             
        //驗(yàn)證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;
            }
             
        //通過(guò)微信接口獲取微信Access_Token   
        public function getAccessToken()
            {
                $token='';
                $this->setUrl();
                $check=$this->checkToken();
                 
                if(session('?'.md5('getaccesstoken')) && $check)
                    {
                        $tokens=session(md5('getaccesstoken'));
                        $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('getaccesstoken'),$result);
                        }
                         
                return $token;
            }
         
        //檢查微信ACCESS_TOKEN是否有效
        public function checkToken()
            {
                if(session('?'.md5('getaccesstoken')) && session(md5('getaccesstoken')))
                    {
                        $time=time();
                        $token=session(md5('getaccesstoken'));
                         
                        if($token->expires_in-$time > 30)
                            {
                                return true;
                            }
                            else
                                {
                                    session(md5('getaccesstoken'),null);
                                }
                    }
                return false;
            }
             
        //保存微信ACCESSTOKEN到數(shù)據(jù)庫(kù)  
        public function saveAccessToken()
            {
                $token=$this->getAccessToken();
                $sql='select `id`,`rate`,token,ex_time,createtime from ly_token where token="'.$token.'" where appid="'.$this->AppID.'" AND secret="'.$this->AppSecret.'"';
                $model=M();
                $result=$model->query($sql);
                if(!empty($result))
                    {
                        $time=time();
                        $expires=$time-$result[0]['createtime'];
                        if($result[0]['ex_time']-$expires > 0)
                            {
                                return $result[0]['token'];                       
                            }
                            else
                                {
                                    $token=$this->getAccessToken();
                                    if(!empty($token))
                                        {
                                            $token=json_decode($token);
                                            if(!isset($token['errcode']) or !$token['errcode'])
                                                {
                                                    if(isset($token['access_token']) && $token['access_token'])
                                                        {
                                                            $data['access_token']=$token['access_token'];
                                                            $data['createtime']=$time;
                                                            $data['ex_time']=$token['expires_in'];
                                                            $data['rate']=$result[0]['rate']+1;
                                                            //$sql='update ly_token set token="'.$token['access_token'].'" ,createtime='.$time.',ex_time='.$token['expires_in'].' where `id`='.$result[0]['id'];
                                                            $model=M('token');
                                                            $update=$model->where('`id`='.$result[0]['id'])->save($data);
                                                            if($update)
                                                            {
                                                                return $token['access_token'];
                                                            }
                                                        }
                                                }
                                                else
                                                    {//微信返回的錯(cuò)誤信息
                                                                $data['errcode']=$token['errcode'];
                                                                $data['errmsg']=$token['errmsg'];
                                                                $data['appid']=$this->AppID;
                                                                $data['secret']=$this->AppSecret;
                                                                $data['createtime']=time();
                                                                $data['rate']=$result[0]['rate']+1;
                                                                $ein=$model->where('`id`='.$result[0]['id'])->save($data);
                                                                if($ein)
                                                                    {
                                                                        return false;
                                                                    }
                                                    }
                                        }
                                }
                    }
                    else
                        {//新插入數(shù)據(jù)庫(kù)保存
                            $token=$this->getAccessToken();
                            $model=M('token');
                            if(!empty($token))
                                        {
                                            $data=array();
                                            $token=json_decode($token);
                                            if(!isset($token['errcode']) or !$token['errcode'])
                                                {
                                                    if(isset($token['access_token']) && $token['access_token'])
                                                        {
                                                            $data['access_token']=$token['access_token'];
                                                            $data['createtime']=$time;
                                                            $data['ex_time']=$token['expires_in'];
                                                            //$sql='insert into ly_token() vlaues()';
                                                            $data['rate']=1;
                                                            $in=$model->data($data)->add();
                                                            if($ein)
                                                            {
                                                                $token['access_token'];
                                                            }
                                                        }
                                                }
                                                else
                                                    {//微信返回的錯(cuò)誤信息
                                                        $data['errcode']=$token['errcode'];
                                                        $data['errmsg']=$token['errmsg'];
                                                        $data['appid']=$this->AppID;
                                                        $data['secret']=$this->AppSecret;
                                                        $data['createtime']=time();
                                                        $data['rate']=1;
                                                        $ein=$model->data($data)->add();
                                                        if($ein)
                                                            {
                                                                return false;
                                                            }
                                                    }
                                        }
                        }
                return false;
            }  
             
             
             
             
             
    }
 
?>

感謝各位的閱讀!關(guān)于“ 微信開(kāi)發(fā)之現(xiàn)金紅包接口如何實(shí)現(xiàn)紅包發(fā)放功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI