Home  >  Article  >  Backend Development  >  PHP development: How to implement WeChat payment function

PHP development: How to implement WeChat payment function

WBOY
WBOYOriginal
2023-09-20 10:52:531655browse

PHP development: How to implement WeChat payment function

PHP development: How to implement the WeChat payment function requires specific code examples

In the process of popularization and development of mobile payment, WeChat payment has become a trusted method for the majority of users One of the payment tools. As a PHP developer, mastering and implementing the WeChat payment function is very important for commercial websites or e-commerce applications. This article will introduce how to use PHP language to implement WeChat payment function and provide specific code examples.

  1. Preparation work

Before we start, we need to prepare the following necessary conditions:

  • A valid WeChat developer account , and enabled the WeChat payment function
  • PHP operating environment, it is recommended to use PHP7 and above version
  • Installed and configured the cURL extension
  • Downloaded and imported the WeChat payment SDK ( Development tool kit)
  1. Set basic payment information

Before developing the payment function, we first need to set some basic information, including:

  • Merchant number (mch_id): The unique identification of the merchant on the WeChat payment platform
  • Application ID (appid): The application ID registered by the developer on the WeChat open platform
  • API key (key): Key used to sign and verify payment messages
  • Certificate path:Certificate path used to verify the payment results returned by the WeChat payment server

In the code, you can Define this information in the form of constants or configuration files to facilitate subsequent calls and management.

define('MCH_ID', '商户号');
define('APPID', '应用ID');
define('KEY', 'API密钥');
define('CERT_PATH', '证书路径');
  1. Generate payment order

After the user clicks the payment button, we need to generate a payment order and submit it to the WeChat payment server for processing. The following is a simple example code for generating a payment order:

function createOrder($body, $out_trade_no, $total_fee, $notify_url) {
    $params = array(
        'appid' => APPID,
        'mch_id' => MCH_ID,
        'nonce_str' => uniqid(),
        'body' => $body,
        'out_trade_no' => $out_trade_no,
        'total_fee' => $total_fee,
        'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
        'notify_url' => $notify_url,
        'trade_type' => 'APP'
    );

    $params['sign'] = generateSign($params);

    $xml = arrayToXml($params);

    $response = sendRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);

    $result = xmlToArray($response);

    return $result;
}

function generateSign($params) {
    ksort($params);

    $string = '';
    foreach ($params as $key => $value) {
        if ($key != 'sign' && $value != '') {
            $string .= "{$key}={$value}&";
        }
    }

    $string .= "key=" . KEY;

    return strtoupper(md5($string));
}

function arrayToXml($array) {
    $xml = "<xml>";
    foreach ($array as $key => $value) {
        $xml .= "<{$key}><![CDATA[{$value}]]></{$key}>";
    }
    $xml .= "</xml>";

    return $xml;
}

function sendRequest($url, $data) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
    curl_setopt($ch, CURLOPT_SSLCERT, CERT_PATH);
    curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
    curl_setopt($ch, CURLOPT_SSLKEY, CERT_PATH);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

In the above code, the createOrder function is used to generate a payment order and call the WeChat payment interface (https://api.mch.weixin.qq.com /pay/unifiedorder) to create a prepayment transaction order. The generateSign function is used to generate a signature, the arrayToXml function is used to convert the parameter array into XML format, and the sendRequest function is used to send an HTTP request.

  1. Processing payment results

The WeChat payment server will send the payment results to our pre-set callback URL through POST. We need to parse it in the code of the callback URL. Pay the results and take appropriate actions as needed. The following is a simple sample code for payment result processing:

$xml = file_get_contents("php://input");
$data = xmlToArray($xml);

if (isset($data['result_code']) && $data['result_code'] == 'SUCCESS') {
    // 支付成功,更新订单状态等操作
    // ...

    $response = array(
        'return_code' => 'SUCCESS',
        'return_msg' => 'OK'
    );
} else {
    // 支付失败,记录错误日志等操作
    // ...

    $response = array(
        'return_code' => 'FAIL',
        'return_msg' => 'ERROR'
    );
}

$responseXml = arrayToXml($response);
echo $responseXml;

In the above code, we obtain the payment result XML from POST through the file_get_contents function and convert it into an associative array. If the result_code in the payment result is SUCCESS, it means the payment was successful and we can perform corresponding order status updates and other operations; otherwise, it means the payment failed and we can record error logs and other operations.

The above is a simple example of using PHP to implement the WeChat payment function. Through these codes, the basic WeChat payment function can be realized. Of course, actual projects may involve more functional and security considerations, which require further development and debugging based on specific needs. I hope this article will help you understand and implement the WeChat payment function.

The above is the detailed content of PHP development: How to implement WeChat payment function. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn