2014年12月18日 星期四

【PHP】PHP寄信 PHPMailer

1.一般寄信
※ $header 詳細說明: 連結

ini_set('SMTP','mail.threewell.com.tw');

$to ="wsxrtgvbuikm@gmail.com"; // 收件者
$subject = "發送測試"; //信件標題
$msg = '<!doctype html><html><head><meta charset="utf-8"></head><body><div style="background-color:#F00;color:#000" align="center">wsxrtgvbuikm@gmail.com</div></body></html>'; // 信件內容

$name = '賴俊銘'; // 寄件人
$sendMail = 'steven@threewell.com.tw'; // 寄件人信箱 要 smtp 允許的信箱

$headers  = "From: ".$name ."<".$sendMail.">". "\r\n"; // 寄件人資料
$headers .= "Content-Type: text/html; charset=utf-8; format=flowed". "\r\n"; // 編碼方式 有用到html要用text/html
$headers .= "MIME-Version: 1.0". "\r\n"; // MIME版本
$headers .= "Content-Transfer-Encoding: 8bit". "\r\n"; // 8位元ASCII碼。
$headers .= "X-Mailer: PHP". "\r\n"; // 哪邊發送的

if(mail($to, $subject, $msg, $headers)):
 echo '發送成功';
else:
 echo '發送失敗';
endif;
  
2.PHPMailer-master 使用套件
  
ini_set('SMTP','mail.threewell.com.tw');

require 'PHPMailer-master/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->setLanguage('zh'); // 設定語系 沒用的語言可刪掉
$mail->CharSet = 'UTF-8'; // 編碼
$mail->setFrom('steven@threewell.com.tw', '賴俊銘'); // 寄件人信箱及寄件人
$mail->addAddress('wsxrtgvbuikm@gmail.com', 'wsxrtgvbuikm'); // 收件人信箱及收件人
$mail->Subject = '信件標題'; // 標題
$mail->msgHTML('<a href="#">wsxrtgvbuikm</a>中文中文'); // 內容
$mail->addAttachment('HDT8GN.jpg'); // 附件 可多個
$mail->addAttachment('HDT8GN2.jpg');

if (!$mail->send()) {
    echo "寄信錯誤: " . $mail->ErrorInfo;
} else {
    echo "寄信成功";
}  
  

2014年12月10日 星期三

【PHP】串接 Yahoo 商城 API


1.API 文件
網址:
http://tw.ews.mall.yahooapis.com/handbook_v2/webservice_guide/index.html
這份文件用google搜尋就可以找到
2.準備
首先要向 yahoo 提出申請 API,申請成功後會拿到 API Key 和 Secret,
API Key 就像帳號一樣,Shared Secret 是將資料編碼。
3.製作簽章及使用API
製作簽章的方法在 Yahoo API 文件就有說明,
直接來實作抓取 Yahoo 商城分類,
在文件中找到 API > Product API > /v1/MallCategory/Get
固定的網址是 http://tw.ews.mall.yahooapis.com/stauth (後面加上功能名稱)
YahooAPI class
/* 
 * @author wsxrtgvbuikm@gmail.com
 * 首先要先 define 以下幾個變數:
 * 1.YAHOO_API_KEY : YAHOO申請的KEY
 * 2.YAHOO_API_SECRET : YAHOO申請的SECRET
 * 3.YAHOO_API_ID : YAHOO的帳號 (測試過其實亂打都過)
 * 4.YAHOO_API_NAME : YAHOO的名稱 (通常是中文)
 * 5.YAHOO_API_URL : http://tw.ews.mall.yahooapis.com/stauth
 */
header("Content-Type: text/html; charset=utf-8");
define('YAHOO_API_KEY','輸入API KEY');
define('YAHOO_API_SECRET','輸入API_SECRET');
define('YAHOO_API_ID','輸入ID');
define('YAHOO_API_NAME','輸入名稱');
define('YAHOO_API_URL','http://tw.ews.mall.yahooapis.com/stauth');

class YahooAPI {
  public function yahoo_api($url,$arr=array(),$other_val=array()){
    $url = YAHOO_API_URL.$url;
    
    $auth_arr = array('ApiKey'=>YAHOO_API_KEY,
                       'TimeStamp'=>time(),
                       'Id'=>YAHOO_API_ID,
                       'Name'=>YAHOO_API_NAME,
                       'Format'=>'json'
                       );
    $request_arr = array_merge($auth_arr,$arr);
    
    // 會有編碼的問題所以用foreach
    //$request = urldecode(http_build_query($request_arr));

    $request = '';
    foreach($request_arr as $key=>$val){
      $request .= $key.'='.$val.'&';
    }
    $request = substr($request,0,-1);
    // $request用SECRET sha1加密
    $signature = hash_hmac('sha1',$request,YAHOO_API_SECRET);
    $request_arr['Signature'] = $signature;
    
    // 加入其他參數像是上傳圖片就不包含在加密範圍
    $request_arr = array_merge($request_arr,$other_val);
    
    $this->request = $request_arr;
    
    $r = $this->curl_file_get_contents($url,$request_arr);
    $arr = json_decode($r,true);
    
    return $arr;
  }  

  public function curl_file_get_contents($url,$request){
    $ch = curl_init();
    $timeout = 5; 
    
    $cookie = "cookieLangId=zh_tw;";
    curl_setopt ($ch, CURLOPT_COOKIE, $cookie);
    
    curl_setopt($ch, CURLOPT_ENCODING, "UTF-8");
    
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt ($ch, CURLOPT_POST, true); // 啟用POST
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $request); 
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
    
    $r = curl_exec($ch);
    
    curl_close($ch);
  
    return $r;
  }
}
  
取得分類
include("YahooAPI.php");
$Yahoo = new YahooAPI();

// 取得 YAHOO 商城分類
$url = '/v1/MallCategory/Get';
$arr = array('CategoryId'=>$CategoryId);
$r = $Yahoo->yahoo_api($url,$arr);
print_r($r);
  
上傳商品範例
在文件上有標記(Require)一定要填,
有些是要用API先去查代碼,其他(Optional)沒有傳值就不要出現不然會失敗..
$url = '/v2/Product/SubmitMain';
$arr = array('SaleType'=>'Normal', // 商品銷售方式
          'SaleTypeInfo'=>'Normal', // 商品銷售資訊
          'ProductName'=>$rs['NAME'], // 商品名稱
          'MallCategoryId'=>$rs['YAHOO_CAT'], // 商城商品分類代號
          'StoreCategoryId'=>$rs['YAHOO_STORE_CAT'], // 商品歸類
          'MarketPrice'=>$rs['MARKET_PRICE'], // 商品市價
          'SalePrice'=>$rs['PRICE'], // 網路價
          'CostPrice'=>$rs['COST'], // 成本價
          'MaxBuyNum'=>$rs['LIMIT_NUM'], // 最高購買數量
          'ShortDescription'=>$rs['DESC'], // 商品簡述
          'LongDescription'=>$rs['CONTENT'], // 商品介紹
          'PayTypeId'=>'1', // 付款方式代號
          'PayTypeId'=>'2', // 付款方式代號
          'PayTypeId'=>'4', // 付款方式代號
          'PayTypeId'=>'8', // 付款方式代號
          'PayTypeId'=>'9', // 付款方式代號
          'PayTypeId'=>'10', // 付款方式代號
          'ShippingId'=>'1', // 物流方式代號
          'ShippingId'=>'2', // 物流方式代號
          'IsTaxFree'=>'0', // 此商品是否為免稅商品
          'SpecTypeDimension'=>'0', // 商品規格
          'CustomizedMainProductId'=>$rs['PRODUCT_ID'], // 商品主貨號
          'Stock'=>$rs['STOCK'], // 商品庫存量 
          'SaftyStock'=>$rs['SAFYSTOCK'], // 商品庫存最低警告量
             
           );
$return = $Yahoo->yahoo_api($url,$arr);
  
上傳圖片
$url = '/v1/Product/UploadImage';
$arr = array('ProductId'=>$productId, // 商品ID
             'MainImage'=>'ImageFile1', // 第一張圖 可一次傳多張
             'Purge'=>'true' // 是否保留原圖
             );
             
// 商品圖系統路徑 - 因為這個不加入簽章所以要另外放
// 前面加上@ CURL 就會當成檔案上傳
$request_arr['ImageFile1'] = '@'.HTTP_REAL_PATH.$rs['IMAGE'];
$return = $this->yahoo_api($url,$arr,$request_arr);