2016年7月6日 星期三

【PHP】header 中加入Authorization token驗證

今天再串某家商成的API,要使用Authorization token驗證,
這邊記錄一下步驟:
1.依照API手冊先取得連線的token
2.用curl方式將token加入header中
加入方式:
Code 部分:
// 取得token
$token = get_token();

$url = THIS_API_URL.$url;

// 將token加入header中
$API->http_header = array();
$API->http_header[] = 'Content-type: application/json';
$API->http_header[] = 'Authorization: basic '.$token;
 
$API->send_method = $send_method;

// 執行
$return = $API->curl_file_get_contents($url,$array);
$return = json_decode($return,true);
Class 部分:
 
class API
{
        // POST 資料
 public $send_method = 'post', // 傳送方式
        $http_header = array('Content-Type: text/plain')
        ;
 public function curl_file_get_contents($url,$request=array())
 {
  $useragent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36";
  $curl = curl_init(); // 啟動一個CURL會話
  curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
  curl_setopt($curl, CURLOPT_REFERER, $url);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在
  curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模擬用戶使用的瀏覽器
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
  curl_setopt($curl, CURLOPT_ENCODING, "UTF-8"); // 編碼
  curl_setopt($curl, CURLOPT_COOKIE, "cookieLangId=zh_tw;"); // 傳送cookie
  curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
  if ($this->send_method == 'post')
  {
   curl_setopt($curl, CURLOPT_POST, count($request)); // 發送一個常規的Post請求
   curl_setopt($curl, CURLOPT_POSTFIELDS, $request); // Post提交的數據包
  }
  curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 連線時間
  curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環
  curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回
  curl_setopt($curl, CURLOPT_HTTPHEADER, $this->http_header);
  $r = curl_exec($curl); // 執行操作
  if (curl_errno($curl)) {
     echo 'Errno'.curl_error($curl);//捕抓異常
  }
  curl_close($curl); // 關閉CURL會話
 
  return $r;
 }
}
php 要讀取 Authorization 要在 .htaccess 加上:
RewriteEngine on
RewriteRule .? - [E=Authorization:%{HTTP:Authorization}]
print_r($GLOBALS);

2016年6月22日 星期三

【Jquery】position:fixed 可左右拉動

今天遇到一件奇怪的需求,

在使用 CSS position:fixed 使區塊固定時,

當拉動左右的卷軸時這個區塊也要跟著動,

這時只能用javascript來解決:

$(window).scroll(function(){
  $(".nav").css({ // 要移動的class或div
    'left': 0 - $(this).scrollLeft()
  });
  $(".footer").css({
    'left': 0 - $(this).scrollLeft()
  });
});

2016年5月17日 星期二

【ASP】基本語法 & 查詢

工作需要不得不去碰 ASP

這邊記錄一下有用到的功能

之後遇到能快速記憶


2016年5月16日 星期一

【Excel】算欄位字數

有時匯入xls檔案欄位有字數限制

這時可以用Excel計算字數的函數:LEN 與 LENB

LEN:不分全形半形都算一個字

LENB:全形字元視為2個字,半形字元視為1個字

用法:

LENB(C2) :C2欄位的字元 (注意欄位屬性為通用格式)

2016年5月12日 星期四

【PHP】AES 128 編碼

API需要用到AES 128 編碼 + base64編碼,特別記下來。

// 編碼
function encrypt($str, $key){
 $str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB);
 $str = base64_encode($str);
 return $str;
}

// 解碼
function decrypt($str, $key){
 $str = base64_decode($str);
 $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB);
 return $str;
}

2016年5月10日 星期二

【MSSQL】DECLARE 宣告

DECLARE @k nvarchar(255)
SET @k = 'ABC'
SELECT *  FROM table WHERE name LIKE '%'+@k+'%'

2016年5月6日 星期五

【PHP】無法 load mcrype

OS : Windows 2003
Apache 2.2.27
PHP 5.2.16

於php.ini 裡,將 ;extension=php_mcrypt.dll uncomment,並重新啟動 apache 後,發現 load mcrypt 出現問題,且該模組也沒有成功的 load。

後來發現原因為 PHP Server 找不到 php_mcrypt.dll 相依的 libmcrypt.dll檔案,即使 path 內有設定相關路徑,也是有錯誤。

解決方法:
將 php 裡的 libmcrypt.dll copy 到 C:\WINDOWS\ 下,然後重新啟動 apache,即可成功載入模組。
都不成功可將 php_mcrypt.dll 及 libmcrypt.dll 放到WINDOWS和SYSTEM32目錄下試試看

2016年4月26日 星期二

「努力工作」是最該被丟棄的職場建議

別期望用「苦勞」贏取別人的肯定,通常的結果都是讓人失望的。新聞網站Business Insider的專欄作家法諾許.布洛克(Farnoosh Brock)列出了必須破除的超時工作3大迷思。

◎「努力工作」是最該被丟棄的職場建議:真正有升遷機會的人,不會整天埋首於工作,他們會把時間拿來塑造「公司不能沒有他」的形象。他們會跳脫自己的日常工作範圍,了解公司的整體運作、觀察關鍵人士並學習、找到志同道合的夥伴建立關係、擴大自己的影響力。

◎超時工作並不會得到老闆的肯定:老闆只會對你更加不放心,擔心你是否無法承擔現在的工作責任,未來就更不可能將更重大的工作責任交到你手上。

◎超時工作只會讓你失去升遷機會:不要被工作牽著鼻子走,如果你無法從容應付現在的工作,就很難說服老闆,把升遷機會留給你。當然,總會有緊急時刻,必須加班趕在期限內完成工作,但不該變成常態。