最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP微信支付開發(fā)實(shí)例

 更新時(shí)間:2016年06月22日 13:04:10   作者:xy2204  
這篇文章主要為大家詳細(xì)介紹了PHP微信支付開發(fā)過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

PHP微信支付開發(fā)過程,分享給大家,供大家參考,具體內(nèi)容如下

1.開發(fā)環(huán)境
Thinkphp 3.2.3
微信:服務(wù)號(hào),已認(rèn)證
開發(fā)域名:http://test.paywechat.com (自定義的域名,外網(wǎng)不可訪問)

2.需要相關(guān)文件和權(quán)限
微信支付需申請開通
微信公眾平臺(tái)開發(fā)者文檔:http://mp.weixin.qq.com/wiki/home/index.html
微信支付開發(fā)者文檔:https://pay.weixin.qq.com/wiki/doc/api/index.html
微信支付SDK下載地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

3.開發(fā)
下載好微信支付PHP版本的SDK,文件目錄為下圖:

這里寫圖片描述

這里寫圖片描述 

把微信支付SDK的Cert和Lib目錄放入Thinkphp,目錄為

這里寫圖片描述 

現(xiàn)在介紹微信支付授權(quán)目錄問題,首先是微信支付開發(fā)配置里面的支付授權(quán)目錄填寫,

這里寫圖片描述

然后填寫JS接口安全域。

這里寫圖片描述

最后設(shè)置網(wǎng)頁授權(quán)

這里寫圖片描述

這里寫圖片描述

這些設(shè)置完,基本完成一半,注意設(shè)置的目錄和我thinkphp里面的目錄。

這里寫圖片描述

4.微信支付配置

這里寫圖片描述

把相關(guān)配置填寫正確。

/**
* 配置賬號(hào)信息
*/

class WxPayConfig
{
 //=======【基本信息設(shè)置】=====================================
 //
 /**
 * TODO: 修改這里配置為您自己申請的商戶信息
 * 微信公眾號(hào)信息配置
 * 
 * APPID:綁定支付的APPID(必須配置,開戶郵件中可查看)
 * 
 * MCHID:商戶號(hào)(必須配置,開戶郵件中可查看)
 * 
 * KEY:商戶支付密鑰,參考開戶郵件設(shè)置(必須配置,登錄商戶平臺(tái)自行設(shè)置)
 * 設(shè)置地址:https://pay.weixin.qq.com/index.php/account/api_cert
 * 
 * APPSECRET:公眾帳號(hào)secert(僅JSAPI支付的時(shí)候需要配置, 登錄公眾平臺(tái),進(jìn)入開發(fā)者中心可設(shè)置),
 * 獲取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
 * @var string
 */
 const APPID = '';
 const MCHID = '';
 const KEY = '';
 const APPSECRET = '';

 //=======【證書路徑設(shè)置】=====================================
 /**
 * TODO:設(shè)置商戶證書路徑
 * 證書路徑,注意應(yīng)該填寫絕對路徑(僅退款、撤銷訂單時(shí)需要,可登錄商戶平臺(tái)下載,
 * API證書下載地址:https://pay.weixin.qq.com/index.php/account/api_cert,下載之前需要安裝商戶操作證書)
 * @var path
 */
 const SSLCERT_PATH = '../cert/apiclient_cert.pem';
 const SSLKEY_PATH = '../cert/apiclient_key.pem';

 //=======【curl代理設(shè)置】===================================
 /**
 * TODO:這里設(shè)置代理機(jī)器,只有需要代理的時(shí)候才設(shè)置,不需要代理,請?jiān)O(shè)置為0.0.0.0和0
 * 本例程通過curl使用HTTP POST方法,此處可修改代理服務(wù)器,
 * 默認(rèn)CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此時(shí)不開啟代理(如有需要才設(shè)置)
 * @var unknown_type
 */
 const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";
 const CURL_PROXY_PORT = 0;//8080;

 //=======【上報(bào)信息配置】===================================
 /**
 * TODO:接口調(diào)用上報(bào)等級(jí),默認(rèn)緊錯(cuò)誤上報(bào)(注意:上報(bào)超時(shí)間為【1s】,上報(bào)無論成敗【永不拋出異?!浚?
 * 不會(huì)影響接口調(diào)用流程),開啟上報(bào)之后,方便微信監(jiān)控請求調(diào)用的質(zhì)量,建議至少
 * 開啟錯(cuò)誤上報(bào)。
 * 上報(bào)等級(jí),0.關(guān)閉上報(bào); 1.僅錯(cuò)誤出錯(cuò)上報(bào); 2.全量上報(bào)
 * @var int
 */
 const REPORT_LEVENL = 1;
}

現(xiàn)在開始貼出代碼:

namespace Wechat\Controller;
use Think\Controller;
/**
 * 父類控制器,需要繼承
 * @file ParentController.class.php
 * @author Gary <lizhiyong2204@sina.com>
 * @date 2015年8月4日
 * @todu
 */
class ParentController extends Controller { 
 protected $options = array (
 'token' => '', // 填寫你設(shè)定的key
 'encodingaeskey' => '', // 填寫加密用的EncodingAESKey
 'appid' => '', // 填寫高級(jí)調(diào)用功能的app id
 'appsecret' => '', // 填寫高級(jí)調(diào)用功能的密鑰
 'debug' => false,
 'logcallback' => ''
 ); 
 public $errCode = 40001; 
 public $errMsg = "no access"; 

 /**
 * 獲取access_token
 * @return mixed|boolean|unknown
 */
 public function getToken(){
 $cache_token = S('exp_wechat_pay_token');
 if(!empty($cache_token)){
 return $cache_token;
 }
 $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s';
 $url = sprintf($url,$this->options['appid'],$this->options['appsecret']); 
 $result = $this->http_get($url);
 $result = json_decode($result,true); 
 if(empty($result)){
 return false;
 } 
 S('exp_wechat_pay_token',$result['access_token'],array('type'=>'file','expire'=>3600));
 return $result['access_token'];
 }

 /**
 * 發(fā)送客服消息
 * @param array $data 消息結(jié)構(gòu){"touser":"OPENID","msgtype":"news","news":{...}}
 */
 public function sendCustomMessage($data){
 $token = $this->getToken();
 if (empty($token)) return false; 
 $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s';
 $url = sprintf($url,$token);
 $result = $this->http_post($url,self::json_encode($data));
 if ($result)
 {
 $json = json_decode($result,true);
 if (!$json || !empty($json['errcode'])) {
 $this->errCode = $json['errcode'];
 $this->errMsg = $json['errmsg'];
 return false;
 }
 return $json;
 }
 return false;
 }

 /**
 * 發(fā)送模板消息
 * @param unknown $data
 * @return boolean|unknown
 */
 public function sendTemplateMessage($data){
 $token = $this->getToken();
 if (empty($token)) return false;
 $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";
 $url = sprintf($url,$token);
 $result = $this->http_post($url,self::json_encode($data));
 if ($result)
 {
 $json = json_decode($result,true);
 if (!$json || !empty($json['errcode'])) {
 $this->errCode = $json['errcode'];
 $this->errMsg = $json['errmsg'];
 return false;
 }
 return $json;
 }
 return false;
 }


 public function getFileCache($name){
 return S($name);
 }

 /**
 * 微信api不支持中文轉(zhuǎn)義的json結(jié)構(gòu)
 * @param array $arr
 */
 static function json_encode($arr) {
 $parts = array ();
 $is_list = false;
 //Find out if the given array is a numerical array
 $keys = array_keys ( $arr );
 $max_length = count ( $arr ) - 1;
 if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) { //See if the first key is 0 and last key is length - 1
 $is_list = true;
 for($i = 0; $i < count ( $keys ); $i ++) { //See if each key correspondes to its position
 if ($i != $keys [$i]) { //A key fails at position check.
  $is_list = false; //It is an associative array.
  break;
 }
 }
 }
 foreach ( $arr as $key => $value ) {
 if (is_array ( $value )) { //Custom handling for arrays
 if ($is_list)
  $parts [] = self::json_encode ( $value ); /* :RECURSION: */
 else
  $parts [] = '"' . $key . '":' . self::json_encode ( $value ); /* :RECURSION: */
 } else {
 $str = '';
 if (! $is_list)
  $str = '"' . $key . '":';
 //Custom handling for multiple data types
 if (!is_string ( $value ) && is_numeric ( $value ) && $value<2000000000)
  $str .= $value; //Numbers
 elseif ($value === false)
 $str .= 'false'; //The booleans
 elseif ($value === true)
 $str .= 'true';
 else
  $str .= '"' . addslashes ( $value ) . '"'; //All other things
 // :TODO: Is there any more datatype we should be in the lookout for? (Object?)
 $parts [] = $str;
 }
 }
 $json = implode ( ',', $parts );
 if ($is_list)
 return '[' . $json . ']'; //Return numerical JSON
 return '{' . $json . '}'; //Return associative JSON
 }

 /**
 +----------------------------------------------------------
 * 生成隨機(jī)字符串
 +----------------------------------------------------------
 * @param int $length 要生成的隨機(jī)字符串長度
 * @param string $type 隨機(jī)碼類型:0,數(shù)字+大小寫字母;1,數(shù)字;2,小寫字母;3,大寫字母;4,特殊字符;-1,數(shù)字+大小寫字母+特殊字符
 +----------------------------------------------------------
 * @return string
 +----------------------------------------------------------
 */
 static public function randCode($length = 5, $type = 2){
 $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
 if ($type == 0) {
 array_pop($arr);
 $string = implode("", $arr);
 } elseif ($type == "-1") {
 $string = implode("", $arr);
 } else {
 $string = $arr[$type];
 }
 $count = strlen($string) - 1;
 $code = '';
 for ($i = 0; $i < $length; $i++) {
 $code .= $string[rand(0, $count)];
 }
 return $code;
 } 


 /**
 * GET 請求
 * @param string $url
 */
 private function http_get($url){
 $oCurl = curl_init();
 if(stripos($url,"https://")!==FALSE){
 curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
 }
 curl_setopt($oCurl, CURLOPT_URL, $url);
 curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
 $sContent = curl_exec($oCurl);
 $aStatus = curl_getinfo($oCurl);
 curl_close($oCurl);
 if(intval($aStatus["http_code"])==200){
 return $sContent;
 }else{
 return false;
 }
 }

 /**
 * POST 請求
 * @param string $url
 * @param array $param
 * @param boolean $post_file 是否文件上傳
 * @return string content
 */
 private function http_post($url,$param,$post_file=false){
 $oCurl = curl_init();
 if(stripos($url,"https://")!==FALSE){
 curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
 }
 if (is_string($param) || $post_file) {
 $strPOST = $param;
 } else {
 $aPOST = array();
 foreach($param as $key=>$val){
 $aPOST[] = $key."=".urlencode($val);
 }
 $strPOST = join("&", $aPOST);
 }
 curl_setopt($oCurl, CURLOPT_URL, $url);
 curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
 curl_setopt($oCurl, CURLOPT_POST,true);
 curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);
 $sContent = curl_exec($oCurl);
 $aStatus = curl_getinfo($oCurl);
 curl_close($oCurl);
 if(intval($aStatus["http_code"])==200){
 return $sContent;
 }else{
 return false;
 }
 }
}

namespace Wechat\Controller;
use Wechat\Controller\ParentController;
/**
 * 微信支付測試控制器
 * @file TestController.class.php
 * @author Gary <lizhiyong2204@sina.com>
 * @date 2015年8月4日
 * @todu
 */
class TestController extends ParentController {
 private $_order_body = 'xxx';
 private $_order_goods_tag = 'xxx';
 public function __construct(){
 parent::__construct();
 require_once ROOT_PATH."Api/lib/WxPay.Api.php";
 require_once ROOT_PATH."Api/lib/WxPay.JsApiPay.php";
 }

 public function index(){
 //①、獲取用戶openid
 $tools = new \JsApiPay();
 $openId = $tools->GetOpenid(); 
 //②、統(tǒng)一下單
 $input = new \WxPayUnifiedOrder(); 
 //商品描述
 $input->SetBody($this->_order_body);
 //附加數(shù)據(jù),可以添加自己需要的數(shù)據(jù),微信回異步回調(diào)時(shí)會(huì)附加這個(gè)數(shù)據(jù)
 $input->SetAttach('xxx');
 //商戶訂單號(hào)
 $out_trade_no = \WxPayConfig::MCHID.date("YmdHis");
 $input->SetOut_trade_no($out_trade_no);
 //總金額,訂單總金額,只能為整數(shù),單位為分 
 $input->SetTotal_fee(1);
 //交易起始時(shí)間
 $input->SetTime_start(date("YmdHis"));
 //交易結(jié)束時(shí)間
 $input->SetTime_expire(date("YmdHis", time() + 600));
 //商品標(biāo)記
 $input->SetGoods_tag($this->_order_goods_tag);
 //通知地址,接收微信支付異步通知回調(diào)地址 SITE_URL=http://test.paywechat.com/Charge
 $notify_url = SITE_URL.'/index.php/Test/notify.html';
 $input->SetNotify_url($notify_url);
 //交易類型
 $input->SetTrade_type("JSAPI");
 $input->SetOpenid($openId);
 $order = \WxPayApi::unifiedOrder($input);
 $jsApiParameters = $tools->GetJsApiParameters($order);
 //獲取共享收貨地址js函數(shù)參數(shù)
 $editAddress = $tools->GetEditAddressParameters();

 $this->assign('openId',$openId);
 $this->assign('jsApiParameters',$jsApiParameters);
 $this->assign('editAddress',$editAddress);
 $this->display(); 
 }

 /**
 * 異步通知回調(diào)方法
 */
 public function notify(){
 require_once ROOT_PATH."Api/lib/notify.php";
 $notify = new \PayNotifyCallBack();
 $notify->Handle(false);
 //這里的IsSuccess是我自定義的一個(gè)方法,后面我會(huì)貼出這個(gè)文件的代碼,供參考。
 $is_success = $notify->IsSuccess(); 
 $bdata = $is_success['data']; 
 //支付成功
 if($is_success['code'] == 1){ 
 $news = array(
  'touser' => $bdata['openid'],
  'msgtype' => 'news',
  'news' => array (
  'articles'=> array (
   array(
   'title' => '訂單支付成功',
   'description' => "支付金額:{$bdata['total_fee']}\n".
   "微信訂單號(hào):{$bdata['transaction_id']}\n"
   'picurl' => '',
   'url' => '' 
   )

  )
  )
 );
 //發(fā)送微信支付通知
 $this->sendCustomMessage($news); 
 }else{//支付失敗

 }
 }

 /**
 * 支付成功頁面
 * 不可靠的回調(diào)
 */
 public function ajax_PaySuccess(){
 //訂單號(hào)
 $out_trade_no = I('post.out_trade_no');
 //支付金額
 $total_fee = I('post.total_fee');
 /*相關(guān)邏輯處理*/

 }

貼上模板HTML

<html>
<head>
 <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/> 
 <title>微信支付樣例-支付</title>
 <script type="text/javascript">
 //調(diào)用微信JS api 支付
 function jsApiCall()
 {
 WeixinJSBridge.invoke(
 'getBrandWCPayRequest',
 {$jsApiParameters},
 function(res){
 WeixinJSBridge.log(res.err_msg);
 //取消支付
 if(res.err_msg == 'get_brand_wcpay_request:cancel'){
 //處理取消支付的事件邏輯
 }else if(res.err_msg == "get_brand_wcpay_request:ok"){
 /*使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
 res.err_msg將在用戶支付成功后返回 ok,但并不保證它絕對可靠。
 這里可以使用Ajax提交到后臺(tái),處理一些日志,如Test控制器里面的ajax_PaySuccess方法。
 */
 }
 alert(res.err_code+res.err_desc+res.err_msg);
 }
 );
 }

 function callpay()
 {
 if (typeof WeixinJSBridge == "undefined"){
 if( document.addEventListener ){
 document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
 }else if (document.attachEvent){
 document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
 document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
 }
 }else{
 jsApiCall();
 }
 }
 //獲取共享地址
 function editAddress()
 {
 WeixinJSBridge.invoke(
 'editAddress',
 {$editAddress},
 function(res){
 var value1 = res.proviceFirstStageName;
 var value2 = res.addressCitySecondStageName;
 var value3 = res.addressCountiesThirdStageName;
 var value4 = res.addressDetailInfo;
 var tel = res.telNumber; 
 alert(value1 + value2 + value3 + value4 + ":" + tel);
 }
 );
 }

 window.onload = function(){
 if (typeof WeixinJSBridge == "undefined"){
 if( document.addEventListener ){
 document.addEventListener('WeixinJSBridgeReady', editAddress, false);
 }else if (document.attachEvent){
 document.attachEvent('WeixinJSBridgeReady', editAddress); 
 document.attachEvent('onWeixinJSBridgeReady', editAddress);
 }
 }else{
 editAddress();
 }
 };

 </script>
</head>
<body>
 <br/>
 <font color="#9ACD32"><b>該筆訂單支付金額為<span style="color:#f00;font-size:50px">1分</span>錢</b></font><br/><br/>
 <div align="center">
 <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >立即支付</button>
 </div>
</body>
</html>

notify.php文件代碼,這里有在官方文件里新添加的一個(gè)自定義方法。

require_once ROOT_PATH."Api/lib/WxPay.Api.php";
require_once ROOT_PATH.'Api/lib/WxPay.Notify.php';
require_once ROOT_PATH.'Api/lib/log.php';

//初始化日志
$logHandler= new \CLogFileHandler(ROOT_PATH."/logs/".date('Y-m-d').'.log');
$log = \Log::Init($logHandler, 15);

class PayNotifyCallBack extends WxPayNotify
{
 protected $para = array('code'=>0,'data'=>'');
 //查詢訂單
 public function Queryorder($transaction_id)
 {
 $input = new \WxPayOrderQuery();
 $input->SetTransaction_id($transaction_id);
 $result = \WxPayApi::orderQuery($input);
 \Log::DEBUG("query:" . json_encode($result));
 if(array_key_exists("return_code", $result)
 && array_key_exists("result_code", $result)
 && $result["return_code"] == "SUCCESS"
 && $result["result_code"] == "SUCCESS")
 {
 return true;
 }
 $this->para['code'] = 0;
 $this->para['data'] = '';
 return false;
 }

 //重寫回調(diào)處理函數(shù)
 public function NotifyProcess($data, &$msg)
 {
 \Log::DEBUG("call back:" . json_encode($data));
 $notfiyOutput = array();

 if(!array_key_exists("transaction_id", $data)){
 $msg = "輸入?yún)?shù)不正確";
 $this->para['code'] = 0;
 $this->para['data'] = '';
 return false;
 }
 //查詢訂單,判斷訂單真實(shí)性
 if(!$this->Queryorder($data["transaction_id"])){
 $msg = "訂單查詢失敗";
 $this->para['code'] = 0;
 $this->para['data'] = '';
 return false;
 }

 $this->para['code'] = 1;
 $this->para['data'] = $data;
 return true;
 }

 /**
 * 自定義方法 檢測微信端是否回調(diào)成功方法
 * @return multitype:number string
 */
 public function IsSuccess(){
 return $this->para;
 }
}

到這里基本上完成,可以在微信端打開http://test.paywechat.com/Charge/index.php/Test/index/
我的環(huán)境,HTTP服務(wù)器沒有重寫url,微信支付繼續(xù)探索中,有些地方可能寫的有問題或不足,望大家諒解,互相學(xué)習(xí)。

以上就是PHP微信支付開發(fā)的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 完美的2個(gè)php檢測字符串是否是utf-8編碼函數(shù)分享

    完美的2個(gè)php檢測字符串是否是utf-8編碼函數(shù)分享

    這篇文章主要介紹了完美的2個(gè)php檢測字符串是否是utf-8編碼函數(shù)分享,一個(gè)比較強(qiáng)大、一個(gè)比較簡潔,需要的朋友可以參考下
    2014-07-07
  • PHP 在數(shù)組中搜索給定的簡單實(shí)例 array_search 函數(shù)

    PHP 在數(shù)組中搜索給定的簡單實(shí)例 array_search 函數(shù)

    下面小編就為大家?guī)硪黄狿HP 在數(shù)組中搜索給定的簡單實(shí)例 array_search 函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • php接口和抽象類使用示例詳解

    php接口和抽象類使用示例詳解

    這篇文章主要介紹了php的接口和抽象類使用示例,并做了詳解講解,需要的朋友可以參考下
    2014-03-03
  • 安裝PHP擴(kuò)展時(shí)解壓官方 tgz 文件后沒有configure文件無法進(jìn)行配置編譯的問題

    安裝PHP擴(kuò)展時(shí)解壓官方 tgz 文件后沒有configure文件無法進(jìn)行配置編譯的問題

    這篇文章主要介紹了安裝PHP擴(kuò)展時(shí)解壓官方 tgz 文件后沒有configure文件無法進(jìn)行配置編譯的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-08-08
  • Laravel如何上傳文件實(shí)現(xiàn)示例

    Laravel如何上傳文件實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Laravel如何上傳文件的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 在Yii框架中使用PHP模板引擎Twig的例子

    在Yii框架中使用PHP模板引擎Twig的例子

    這篇文章主要介紹了在Yii框架中使用PHP模板引擎Twig的例子,Twig是一款簡潔的PHP模板引擎,在此小編也介紹一下,需要的朋友可以參考下
    2014-06-06
  • Laravel認(rèn)證原理以及完全自定義認(rèn)證詳解

    Laravel認(rèn)證原理以及完全自定義認(rèn)證詳解

    最近在學(xué)習(xí)laravel框架,所以下面這篇文章主要給大家介紹了關(guān)于Laravel認(rèn)證原理以及完全自定義認(rèn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • PHP的imageTtfText()函數(shù)深入詳解

    PHP的imageTtfText()函數(shù)深入詳解

    這篇文章主要介紹了PHP的imageTtfText()函數(shù)深入詳解,圖文講解的很清楚,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • PHP實(shí)現(xiàn)linux命令tail -f

    PHP實(shí)現(xiàn)linux命令tail -f

    tail 命令從指定點(diǎn)開始將文件寫到標(biāo)準(zhǔn)輸出.使用tail命令的-f選項(xiàng)可以方便的查閱正在改變的日志文件,tail -f filename會(huì)把filename里最尾部的內(nèi)容顯示在屏幕上,并且不但刷新,使你看到最新的文件內(nèi)容.接下來通過本文給大家介紹PHP實(shí)現(xiàn)linux命令tail -f,需要的朋友參考下
    2016-02-02
  • Laravel框架源碼解析之模型Model原理與用法解析

    Laravel框架源碼解析之模型Model原理與用法解析

    這篇文章主要介紹了Laravel框架源碼解析之模型Model,結(jié)合實(shí)例形式分析了Laravel框架模型Model相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05

最新評(píng)論

东港市| 江安县| 大埔县| 芷江| 普安县| 上林县| 庄河市| 金塔县| 郁南县| 辛集市| 阜阳市| 大竹县| 双江| 瑞金市| 报价| 大连市| 郧西县| 南川市| 宁强县| 张家港市| 大新县| 论坛| 嘉禾县| 贡嘎县| 绥中县| 安达市| 新化县| 微山县| 濮阳市| 亳州市| 普陀区| 汨罗市| 佛冈县| 上杭县| 辉南县| 财经| 临泽县| 宁远县| 赣州市| 洛宁县| 宁化县|