要使用PHP与微信支付API进行集成,您需要执行以下步骤,包括生成预支付订单、生成支付二维码、处理用户支付通知等。以下是一个简化的示例代码,用于生成微信支付二维码:
<?php
// 1. 设置必要的参数
$appId = 'YOUR_APP_ID'; // 微信公众号或小程序的App ID
$mchId = 'YOUR_MCH_ID'; // 微信支付商户号
$key = 'YOUR_API_KEY'; // 微信支付API密钥
$outTradeNo = 'YOUR_ORDER_NUMBER'; // 订单号
$totalFee = 100; // 订单金额(单位:分)
$notifyUrl = 'YOUR_NOTIFY_URL'; // 异步通知URL
// 2. 构建预支付订单参数
$prepayData = [
'appid' => $appId,
'mch_id' => $mchId,
'nonce_str' => uniqid(),
'body' => 'Your Order Description', // 订单描述
'out_trade_no' => $outTradeNo,
'total_fee' => $totalFee,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => $notifyUrl,
'trade_type' => 'NATIVE', // 扫码支付
];
// 3. 生成签名
$prepayData['sign'] = generateSignature($prepayData, $key);
// 4. 将参数转换为XML格式
$xmlData = arrayToXml($prepayData);
// 5. 发送HTTP请求,获取预支付订单信息
$prepayOrderResult = sendPostRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xmlData);
// 6. 解析预支付订单结果
$prepayOrderData = xmlToArray($prepayOrderResult);
// 7. 生成支付二维码
$qrCodeUrl = $prepayOrderData['code_url'];
// 8. 显示支付二维码
echo '<img src="' . $qrCodeUrl . '" alt="Pay with WeChat QR Code">';
// 以下是一些辅助函数的示例,用于签名生成和HTTP请求发送
function generateSignature($data, $key) {
ksort($data);
$string = '';
foreach ($data as $k => $v) {
$string .= $k . '=' . $v . '&';
}
$string .= 'key=' . $key;
return strtoupper(md5($string));
}
function arrayToXml($data) {
$xml = '<xml>';
foreach ($data as $key => $value) {
$xml .= "<$key><![CDATA[$value]]></$key>";
}
$xml .= '</xml>';
return $xml;
}
function xmlToArray($xml) {
$array = [];
$xmlObject = simplexml_load_string($xml);
foreach ($xmlObject as $key => $value) {
$array[$key] = (string)$value;
}
return $array;
}
function sendPostRequest($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
?>
这是一个简单的示例,用于生成微信支付二维码。在实际应用中,您需要按照微信支付文档的要求进行更复杂的支付流程,包括用户支付通知的验证和订单状态的更新。此外,确保在实际应用中保护您的API密钥和敏感信息,以确保安全性。在生产环境中,建议使用微信支付SDK或库,以简化整个过程。