首頁  >  文章  >  後端開發  >  php怎麼實現微信二維碼支付

php怎麼實現微信二維碼支付

PHPz
PHPz原創
2023-04-19 09:20:412068瀏覽

隨著行動支付的普及,微信成為了國內使用最廣泛的支付方式之一。微信支付提供了多種支付方式,二維碼支付也受到了越來越多用戶的歡迎。本文將介紹如何使用PHP實作微信二維碼支付。

一、前置條件

在開始之前,需要準備以下幾個條件:

  1. 微信開發者帳號
  2. 微信支付功能申請透過
  3. PHP開發環境的搭建
  4. 微信支付SDK

#二、微信支付流程

微信支付的流程可以簡單概括為以下幾個步驟:

  1. 使用者開啟商家的付款頁面並選擇付款方式
  2. 商家將使用者的訂單資訊傳送至微信支付
  3. 微信支付產生二維碼並回傳給商家
  4. 商家將二維碼展示給使用者
  5. 使用者使用微信掃描二維碼並完成付款
  6. 微信付款向商家發送付款結果通知

為了實現微信二維碼支付,我們需要依照上述流程依序完成對應的步驟。

三、實現步驟

  1. 創建支付訂單

在商家網站上,用戶需要填寫訂單信息,並選擇微信支付方式。在使用者提交訂單後,商家需要將訂單資訊傳送給微信付款。

在PHP中,我們可以使用CURL庫向微信支付API發送POST請求。以下是一個範例程式碼:

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
$fields = array(
    "appid" => "YOUR_APP_ID", // 公众号ID或应用ID
    "mch_id" => "YOUR_MCH_ID", // 商户号
    "nonce_str" => uniqid(), // 随机字符串
    "out_trade_no" => "YOUR_ORDER_NUMBER", // 商户订单号
    "total_fee" => "YOUR_ORDER_AMOUNT", // 订单金额,单位为分
    "spbill_create_ip" => $_SERVER["REMOTE_ADDR"], // 用户端实际ip
    "notify_url" => "YOUR_NOTIFY_URL", // 支付通知回调地址
    "trade_type" => "NATIVE", // 交易类型,NATIVE为扫码支付
    "product_id" => "PRODUCT_ID", // 商品ID
);
$fields["sign"] = make_sign($fields, "YOUR_MCH_KEY"); // 签名字段
$xml = array_to_xml($fields); // 将数组转换为XML格式
$response = curl_post($url, $xml); // 发送POST请求
$result = xml_to_array($response); // 将响应XML转换为数组格式

在上述程式碼中,我們使用了以下幾個函數:

  • uniqid() 用來產生一個唯一的隨機字串
  • make_sign() 用於產生簽章
  • #array_to_xml() 將陣列轉換為XML格式
  • #curl_post() 發送POST請求
  • xml_to_array() 將XML轉換為陣列格式

其中,簽章產生的程式碼如下:

function make_sign($fields, $key) {
    $string = "";
    ksort($fields);
    foreach ($fields as $k => $v) {
        if ($k != "sign" && $v != "" && !is_array($v)) {
            $string .= $k . "=" . $v . "&";
        }
    }
    $string .= "key=" . $key;
    return strtoupper(md5($string));
}

要注意的是,商家號碼和API金鑰可在微信支付商家平台中取得。

  1. 產生二維碼

在獲取到微信支付的回應後,商家需要解析回應中的二維碼鏈接,並將其產生二維碼。 PHP中,我們可以使用PHPQRCode函式庫來產生二維碼,範例程式碼如下:

require_once("phpqrcode.php");
QRcode::png($result["code_url"]);

在上述程式碼中,我們首先引入了PHPQRCode函式庫。然後,使用其QRcode::png()方法產生二維碼。

  1. 展示二維碼

在產生二維碼後,商家需要將其展示給使用者。在PHP中,我們可以使用<img>標籤來展示二維碼,範例程式碼如下:

echo "<img src=&#39;data:image/png;base64," . base64_encode(file_get_contents("qrcode.png")) . "&#39; />";

在上述程式碼中,我們將二維碼檔案讀取為二進位數據,並將其進行Base64編碼。然後,將編碼後的資料作為圖片的URL,使用<img>標籤展示二維碼。

  1. 付款結果通知

在用戶完成付款後,微信支付會向商家的付款結果通知URL推播付款結果。在接收通知後,商家需要驗證通知的有效性,並根據通知中的付款結果更新訂單狀態。 PHP的範例程式碼如下:

$xml = file_get_contents("php://input");
$data = xml_to_array($xml);
if (check_sign($data, "YOUR_MCH_KEY")) {
    if ($data["return_code"] == "SUCCESS" && $data["result_code"] == "SUCCESS") {
        // 修改订单状态
        // ...
        echo "SUCCESS";
    } else {
        echo "FAIL";
    }
} else {
    echo "FAIL";
}

在上述程式碼中,我們首先使用file_get_contents("php://input")讀取POST請求體中的XML數據,並將其轉換為數組格式。然後,使用check_sign()函數驗證簽章的有效性。最後,根據付款結果更新訂單狀態,並向微信付款發送「SUCCESS」或「FAIL」回應。

四、總結

本文介紹如何使用PHP實作微信二維碼支付。在實作過程中,需要注意微信支付流程的細節,並合理地使用PHP的相關函數和函式庫。希望本文能為您在實現微信支付時提供一些幫助。

以上是php怎麼實現微信二維碼支付的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn