PHP实现微信扫码支付功能
微信支付是一种便捷、快速的支付方式,它已被广泛应用于电商、票务、餐饮、旅游等领域。微信支付包含多种支付方式,其中扫码支付是一种非常常见的方式。本文将介绍如何使用PHP语言实现微信扫码支付功能。
一、获取微信支付API
首先,需要在微信商户平台上注册账号,以获取微信支付API。注册完成后,进入“开发配置”页面,填写商户信息、证书等必要信息,然后在“支付配置”页面中获取APP ID、商户号、密钥等信息。
二、创建PHP程序
创建支付程序时,需要使用微信支付提供的API,其中包括统一下单API、查询订单API等。以下是一个简单的扫码支付程序框架:
<?php
// 统一下单API
$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
// 请求数据
$data = [
// 公众账号ID
'appid' => '',
// 商户号
'mch_id' => '',
// 随机字符串
'nonce_str' => '',
// 商品描述
'body' => '',
// 商户订单号
'out_trade_no' => '',
// 标价金额
'total_fee' => '',
// 终端IP
'spbill_create_ip' => '',
// 通知地址
'notify_url' => '',
// 交易类型
'trade_type' => 'NATIVE',
// 商品ID
'product_id' => ''
];
// 签名
$sign = '';
// 将签名添加到请求数据中
$data['sign'] = $sign;
// 将请求数据转换为XML格式
$xml = '';
// 发送HTTP请求
$response = file_get_contents($url . '?' . $xml);
// 将响应数据转换为数组
$result = [];
// 判断支付是否成功
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
// 获取二维码链接
$qr_code = $result['code_url'];
// 显示支付二维码
echo '<img alt="支付二维码" src="' . $qr_code . '"/>';
} else {
// 显示支付失败信息
echo '支付失败:' . $result['return_msg'];
}
?>
三、填写请求数据
上面程序框架中的请求数据包括一些必填参数和一些可选参数。以下是一些重要参数的说明:
- APP ID:用于标识开发者身份,每个应用都有一个 的APP ID。
- 商户号:用于标识商家身份。
- 随机字符串:每次生成的随机字符串必须不同,用于防止重复提交。
- 商品描述:简要描述商品或服务。
- 商户订单号:商户系统内部的订单号,要求32个字符内 。
- 标价金额:订单总金额,单位为分。
- 终端IP:用户端实际ip。
- 通知地址:接收微信支付异步通知回调地址,不能携带参数。
- 交易类型:取值如下:JSAPI为公众号支付、NATIVE为扫码支付、APP为APP支付、H5为H5支付。
- 商品ID:trade_type=NATIVE时(即扫码支付),此参数必传。此参数为二维码中包含的商品ID,商户自行定义。
四、生成签名
在请求数据中添加签名前,需要先生成签名。签名的生成规则如下:
- 将请求数据中的所有参数按照参数名ASCII码从小到大排序(字典序)后,使用URL键值对的格式拼接成字符串,即key=value&key=value…&key=value的形式。
- 在拼接好的字符串最后加上商户支付密钥,并对该字符串进行MD5运算,生成签名。
例如,以下是一个生成签名的示例:
<?php
// 请求数据
$data = [
'appid' => 'wx2421b1c4370ec43b',
'mch_id' => '10000100',
'nonce_str' => 'IITRi8Iabbblz1Jc',
'body' => 'test',
'out_trade_no' => '1415659990',
'total_fee' => '1',
'spbill_create_ip' => '14.23.150.211',
'notify_url' => 'http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php',
'trade_type' => 'NATIVE',
'product_id' => '123456789',
];
// 商户支付密钥
$key = '192006250b4c09247ec02edce69f6a2d';
// 将请求数据中的参数按字典序排序
ksort($data);
// 将所有参数用&拼接起来
$query = http_build_query($data);
// 在拼接好的字符串最后加上商户支付密钥
$query .= '&key=' . $key;
// 对该字符串进行MD5运算
$sign = strtoupper(md5($query));
?>
五、生成二维码
生成二维码的步骤如下:
- 判断支付是否成功。
- 获取二维码链接。
- 显示支付二维码。
以下是一个生成二维码的示例:
<?php
// 响应数据
$result = [
'return_code' => 'SUCCESS',
'result_code' => 'SUCCESS',
'code_url' => 'http://paysdk.weixin.qq.com/example/qrcode.php?data=UUID'
];
// 判断支付是否成功
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
// 获取二维码链接
$qr_code = $result['code_url'];
// 显示支付二维码
echo '<img alt="支付二维码" src="' . $qr_code . '"/>';
} else {
// 显示支付失败信息
echo '支付失败:' . $result['return_msg'];
}
?>
以上就是使用PHP语言实现微信扫码支付功能的基本步骤。开发者可以根据实际需要对程序进行相应的修改和优化。
