微信小店提供商品管理、訂單處理、物流設置等接口,基於 Access Token 認證,HTTPS POST JSON 交互。
class WXD {
public $AppID = "";
public $AppSecret = "";
public $AccessToken = "";
private $tokenFile;
private $logisticsMap = [];
public function __construct($shopId = '0') {
$this->tokenFile = $_SERVER['DOCUMENT_ROOT'] . "/json_file/access_token_{$shopId}.json";
$this->initLogistics();
}
// 初始化物流公司映射
private function initLogistics() {
$this->logisticsMap = [
'Fsearch_code' => '郵政EMS',
'002shentong' => '申通快遞',
'066zhongtong' => '中通速遞',
'056yuantong' => '圓通速遞',
'042tiantian' => '天天快遞',
'003shunfeng' => '順豐速運',
'059Yunda' => '韻達快運',
'064zhaijisong'=> '宅急送',
'020huitong' => '匯通快運',
'zj001yixun' => '易迅快遞',
];
}
// 通用 cURL 請求
private function curlRequest($url, $data = null) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => !empty($data),
CURLOPT_POSTFIELDS => $data,
]);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
// 獲取 Access Token (帶緩存)
public function getAccessToken() {
$data = $this->loadToken();
if ($data['expire_time'] < time()) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->AppID}&secret={$this->AppSecret}";
$result = json_decode($this->curlRequest($url), true);
if (isset($result['access_token'])) {
$this->saveToken($result['access_token']);
return $result['access_token'];
}
throw new Exception("獲取 Token 失敗: " . json_encode($result));
}
return $data['access_token'];
}
private function loadToken() {
if (!file_exists($this->tokenFile)) return ['expire_time'=>0, 'access_token'=>''];
return json_decode(file_get_contents($this->tokenFile), true);
}
private function saveToken($token) {
$data = ['expire_time' => time() + 7000, 'access_token' => $token];
file_put_contents($this->tokenFile, json_encode($data));
}
// ========== 商品相關 ==========
// 獲取商品列表 (按狀態)
public function getProducts($status = 0) {
$url = "https://api.weixin.qq.com/merchant/getbystatus?access_token=" . $this->getAccessToken();
return json_decode($this->curlRequest($url, '{"status":' . $status . '}'), true);
}
// 獲取單個商品詳情
public function getProduct($productId) {
$url = "https://api.weixin.qq.com/merchant/get?access_token=" . $this->getAccessToken();
return json_decode($this->curlRequest($url, '{"product_id":"' . $productId . '"}'), true);
}
// ========== 訂單相關 ==========
// 獲取訂單詳情
public function getOrder($orderId) {
$url = "https://api.weixin.qq.com/merchant/order/getbyid?access_token=" . $this->getAccessToken();
return json_decode($this->curlRequest($url, '{"order_id":"' . $orderId . '"}'), true);
}
// 獲取訂單列表 (按時間/狀態篩選)
public function getOrders($filter = []) {
$url = "https://api.weixin.qq.com/merchant/order/getbyfilter?access_token=" . $this->getAccessToken();
if (empty($filter)) {
$firstDay = strtotime(date('Y-m-01'));
$filter = ['begintime' => $firstDay, 'endtime' => strtotime("+1 month -1 day", $firstDay)];
}
return json_decode($this->curlRequest($url, json_encode($filter)), true);
}
// ========== 發貨/關單 ==========
// 設置發貨信息
public function setDelivery($orderId, $companyCode, $trackNo, $needDelivery = 1) {
$url = "https://api.weixin.qq.com/merchant/order/setdelivery?access_token=" . $this->getAccessToken();
$data = [
'order_id' => $orderId,
'need_delivery' => $needDelivery,
'delivery_company' => $companyCode,
'delivery_track_no' => $trackNo,
];
return json_decode($this->curlRequest($url, json_encode($data)), true);
}
// 關閉訂單
public function closeOrder($orderId) {
$url = "https://api.weixin.qq.com/merchant/order/close?access_token=" . $this->getAccessToken();
return json_decode($this->curlRequest($url, '{"order_id":"' . $orderId . '"}'), true);
}
// 獲取物流公司代碼
public function getLogisticsCode($name) {
return array_search($name, $this->logisticsMap);
}
}
require_once 'WXD.php';
$wxd = new WXD();
$wxd->AppID = "your_appid";
$wxd->AppSecret = "your_secret";
echo "";
// 1. 獲取所有上架商品
print_r($wxd->getProducts(0));
// 2. 獲取單個商品
print_r($wxd->getProduct('pP3K2s25zDRY50n3nLCKqZvPzINM'));
// 3. 獲取本月訂單
print_r($wxd->getOrders());
// 4. 發貨
$wxd->setDelivery(
'12963133879983600667',
'059Yunda', // 韻達代碼
'1000464090326'
);
// 5. 關閉訂單
print_r($wxd->closeOrder('12963133879983600740'));
echo "";
| 模塊 | 關鍵點 |
|---|---|
| Token 管理 | 文件緩存 7000 秒,自動刷新,避免頻繁請求被限流 |
| HTTPS 請求 | 關閉 SSL 驗證 (測試環境),生產需配置 CA 證書 |
| JSON 交互 | 請求/響應均為 JSON,注意字符串拼接轉義 |
| 物流映射 | 維護微信規範的物流公司代碼表 |
| 錯誤處理 | 檢查 errcode/errmsg,記錄日誌便於排查 |
封裝 WXD 類實現微信小店核心功能:Token 自動管理、商品查詢、訂單全生命周期、物流發貨。代碼結構清晰,易於擴展新接口。生產部署時注意 Token 共享存儲、HTTPS 證書配置、異步解耦、全鏈路監控。