-
首先,你需要在微信支付平台上创建一个应用,并获得应用的 APPID 和密钥。
-
在你的网站中创建一个支付页面,让用户输入支付金额和其他必要的信息。
-
当用户点击支付按钮后,你需要使用微信支付的 API 将订单信息提交到微信支付平台,并生成一个支付链接。
-
将生成的支付链接返回给用户,让用户使用微信扫描二维码或点击链接进行支付。
-
用户支付成功后,微信支付平台会向你的服务器发送一个支付通知,你需要在服务器端接收并处理这个通知。
-
在处理支付通知时,你需要验证通知的合法性,并更新订单状态。
-
如果支付成功,你可以在页面中显示你要出现的文字。
以下是一个简单的 PHP 代码示例,用于生成微信支付链接和处理支付通知:
// 生成微信支付链接
function generatePayLink($order) {
$params = array(
'appid' => 'YOUR_APPID',
'mch_id' => 'YOUR_MCH_ID',
'nonce_str' => uniqid(),
'body' => '订单描述',
'out_trade_no' => $order['id'],
'total_fee' => $order['amount'],
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => 'YOUR_NOTIFY_URL',
'trade_type' => 'NATIVE'
);
ksort($params);
$params['sign'] = generateSign($params, 'YOUR_APPKEY');
$xml = arrayToXml($params);
$response = httpPost('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);
$result = xmlToArray($response);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
return $result['code_url'];
} else {
return false;
}
}
// 处理支付通知
function handlePayNotify() {
$xml = file_get_contents('php://input');
$params = xmlToArray($xml);
if (validateSign($params, 'YOUR_APPKEY')) {
// 更新订单状态
$orderId = $params['out_trade_no'];
$status = $params['result_code'] == 'SUCCESS' ? 'paid' : 'failed';
updateOrderStatus($orderId, $status);
// 返回支付成功消息
echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
} else {
// 返回签名错误消息
echo '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>';
}
}
// 生成签名
function generateSign($params, $key) {
$string = '';
foreach ($params as $k => $v) {
if ($v != '' && $k != 'sign') {
$string .= $k . '=' . $v . '&';
}
}
$string .= 'key=' . $key;
return strtoupper(md5($string));
}
// 验证签名
function validateSign($params, $key) {
$sign = $params['sign'];
unset($params['sign']);
return generateSign($params, $key) == $sign;
}
// 将数组转换为 XML
function arrayToXml($array) {
$xml = '<xml>';
foreach ($array as $key => $value) {
$xml .= '<' . $key . '><![CDATA[' . $value . ']]></' . $key . '>';
}
$xml .= '</xml>';
return $xml;
}
// 将 XML 转换为数组
function xmlToArray($xml) {
$array = array();
$xmlObj = simplexml_load_string($xml);
foreach ($xmlObj as $key => $value) {
$array[$key] = (string)$value;
}
return $array;
}
// 发送 HTTP POST 请求
function httpPost($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);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}