<?php
// 微信支付相关配置
$appid = 'YOUR_APPID'; // 微信公众平台应用ID
$mch_id = 'YOUR_MCH_ID'; // 微信支付商户号
$apikey = 'YOUR_API_KEY'; // 商户API密钥
// 订单信息
$out_trade_no = 'ORDER123456789'; // 商户订单号
$total_fee = 100; // 订单总金额(单位:分)
$body = '商品描述'; // 商品描述
// 生成签名
function generateSign($params, $apikey) {
ksort($params);
$string = '';
foreach ($params as $key => $value) {
if ($key != 'sign' && $value != '') {
$string .= $key . '=' . $value . '&';
}
}
$string .= 'key=' . $apikey;
return strtoupper(md5($string));
}
// 请求参数
$params = [
'appid' => $appid,
'mch_id' => $mch_id,
'nonce_str' => md5(time()),
'sign_type' => 'MD5',
'body' => $body,
'out_trade_no' => $out_trade_no,
'total_fee' => $total_fee,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => 'https://example.com/notify', // 支付结果通知URL
'trade_type' => 'NATIVE' // 支付类型,NATIVE表示扫码支付
];
// 生成签名
$params['sign'] = generateSign($params, $apikey);
// 发起请求
function sendRequest($url, $data) {
$xml = '<xml>';
foreach ($data as $key => $value) {
$xml .= "<$key>$value</$key>";
}
$xml .= '</xml>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: text/xml']);
$response = curl_exec($ch);
curl_close($ch);
return simplexml_load_string($response);
}
// 微信支付预支付接口
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$response = sendRequest($url, $params);
// 输出结果
echo "<pre>";
print_r($response);
echo "</pre>";
?>
这个PHP脚本用于通过微信支付API生成一个预支付订单,适用于扫码支付场景。生成预支付订单是微信支付流程中的一个重要步骤,它允许商户在实际支付之前创建一个订单,并返回一个二维码链接,用户可以扫描二维码进行支付。
在使用这个脚本之前,你需要:
- 替换
YOUR_APPID
为你的微信公众平台应用ID。 - 替换
YOUR_MCH_ID
为你的微信支付商户号。 - 替换
YOUR_API_KEY
为你的商户API密钥。
generateSign
函数用于生成签名,确保请求的合法性。sendRequest
函数使用cURL
将请求数据以XML格式发送到微信支付接口,并接收返回的结果。最后,脚本输出响应结果,便于查看和处理。
请确保在实际应用中妥善处理支付结果通知,并将notify_url
设置为你处理支付结果的服务器端接口。