首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 整合支付寶支付接口完整指南:配置、核心類別與支付頁面實作

     編輯:PHP 綜合知識

支付寶作為主流第三方支付平台,整合至自有網站是電商開發的必修課。本文以經典版支付寶接口為例,詳細拆解配置檔、核心類別 alipay、支付提交頁 pay.php 三大模組,提供可直接部署的完整程式碼。

架構概覽

  • alipay_config.php:集中管理商戶資訊、費率、回調網址等參數
  • alipay.php:封裝簽名生成、參數組裝、跳轉網址產生邏輯
  • pay.php:接收訂單表單、呼叫核心類別、產生支付寶跳轉連結

1. 配置檔 alipay_config.php

<?php
// alipay_config.php
$interfaceurl = "https://www.alipay.com/payto:";  // 支付寶網關
$sitename     = "您的網站名稱";
$weburl       = "https://您的網站網址";
$o_fee        = "0.00";  // 平郵費用
$e_fee        = "0.00";  // 快遞費用
$selleremail  = "";      // 支付寶賣家帳號 (Email)
$payalikey    = "";      // 安全校驗碼 (Key)
$imgurl       = "pay.gif";         // 支付按鈕圖片
$imgtitle     = "使用支付寶購買";   // 按鈕提示文字
?>

2. 核心類別 alipay.php

geturl() 方法接收 23 個參數,組裝成支付寶要求的查詢字串,並以 MD5(參數串 + key) 產生簽名 ac:

<?php
require_once("alipay_config.php");

class alipay {
  public function geturl($s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,
                         $s11,$s12,$s13,$s14,$s15,$s16,$s17,$s18,
                         $s19,$s20,$s21,$s22,$s23) {
    $parameter = array(
      'cmd'           => $s1,   'subject'       => $s2,
      'body'          => $s3,   'order_no'      => $s4,
      'price'         => $s5,   'url'           => $s6,
      'type'          => $s7,   'number'        => $s8,
      'transport'     => $s9,   'ordinary_fee'  => $s10,
      'express_fee'   => $s11,  'readonly'      => $s12,
      'buyer_msg'     => $s13,  'seller'        => $s14,
      'buyer'         => $s15,  'buyer_name'    => $s16,
      'buyer_address' => $s17,  'buyer_zipcode' => $s18,
      'buyer_tel'     => $s19,  'buyer_mobile'  => $s20,
      'partner'       => $s21
    );

    $url = $s22 . $s14 . "?";  // gateway + seller_email
    $acsouce = '';
    foreach ($parameter as $key => $value) {
      if ($value) {
        $url .= $key . "=" . urlencode($value) . "&";
        $acsouce .= $key . $value;
      }
    }
    $url .= 'ac=' . md5($acsouce . $s23);  // s23 = $payalikey
    return $url;
  }
}
?>

3. 支付頁面 pay.php

接收 POST 表單資料,組裝參數呼叫 alipay::geturl(),最後輸出確認頁與「前往支付寶」按鈕:

<?php
error_reporting(0);
// 接收表單欄位
$aliname      = $_POST["aliname"];
$alizipcode   = $_POST["alizipcode"];
$aliphone     = $_POST["aliphone"];
$aliaddress   = $_POST["aliaddress"];
$aliorder     = $_POST["aliorder"];
$alimailtype  = $_POST["alimailtype"];
$alimoney     = $_POST["alimoney"];
$alimob       = $_POST["alimob"];
$alibody      = $_POST["alibody"];

require_once("alipay_config.php");
require_once("alipay.php");

$cmd           = '0001';
$subject       = "訂單號:".$aliorder;
$body          = '商品介紹';
$order_no      = $aliorder;
$price         = $alimoney;
$url           = 'https://您的網址';  // 回調網址
$type          = '1';
$number        = '1';
$transport     = $alimailtype;
$ordinary_fee  = '0.00';
$express_fee   = '0.00';
$readonly      = 'true';
$buyer_msg     = $alibody;
$seller        = $selleremail;
$buyer         = '';
$buyer_name    = $aliname;
$buyer_address = $aliaddress;
$buyer_zipcode = $alizipcode;
$buyer_tel     = $aliphone;
$buyer_mobile  = $alimob;
$partner       = '2088002008096997';  // 合作夥伴 ID

$geturl = new alipay();
$link = $geturl->geturl(
  $cmd,$subject,$body,$order_no,$price,$url,$type,$number,$transport,
  $ordinary_fee,$express_fee,$readonly,$buyer_msg,$seller,$buyer,
  $buyer_name,$buyer_address,$buyer_zipcode,$buyer_tel,$buyer_mobile,$partner,
  $interfaceurl,$payalikey
);
?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>支付寶付款確認頁</title>
</head>
<body>
  <table width="492" align="center" border="0" cellpadding="0" cellspacing="0" class="border">
    <tr><td class="topbg" height="30"><strong>支付寶付款確認</strong></td></tr>
    <tr>
      <td>
        <table width="100%" align="center" bgcolor="#ffffff">
          <tr class="tdbg"><td width="14%">訂單號碼:</td><td><?= $aliorder ?></td></tr>
          <tr class="tdbg"><td>收貨人:</td><td><?= $aliname ?></td></tr>
          <tr class="tdbg"><td>付款金額:</td><td><b><?= $alimoney ?></b></td></tr>
          <tr class="tdbg"><td>收貨地址:</td><td><?= $aliaddress ?></td></tr>
          <tr class="tdbg"><td>物流方式:</td><td><?= $alimailtype ?> (1.平郵 2.快遞 3.虛擬)</td></tr>
          <tr class="tdbg"><td>聯系電話:</td><td><?= $aliphone ?></td></tr>
          <tr class="tdbg"><td>郵政編碼:</td><td><?= $alizipcode ?></td></tr>
          <tr class="tdbg"><td>手機號碼:</td><td><?= $alimob ?></td></tr>
          <tr class="tdbg"><td>客戶留言:</td><td><?= $alibody ?></td></tr>
          <tr class="tdbg">
            <td></td>
            <td>
              <input type="button" onclick="history.go(-1)" value="返回修改訂單">
              <a href="<?= $link ?>" target="_blank">
                <img src="<?= $imgurl ?>" alt="<?= $imgtitle ?>" border="0">
              </a>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</body></html>

安全與維護建議

  • 升級至新版 API: 本範例為舊版「即時到帳」接口,支付寶已推出「統一收單下單並支付頁面接口」(alipay.trade.page.pay),建議新專案採用新版 SDK。
  • 金額驗證: 伺服器端務必重新核對金額,防止前端竄改。
  • 異步通知處理: 實作 notify_url 驗證簽名、更新訂單狀態、防重複處理。
  • 敏感資訊加密: Key、Partner ID 等勿硬編碼,建議存放於環境變數或加密配置檔。

掌握核心參數組裝與簽名邏輯,即可靈活對接支付寶各類支付產品。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved