欢迎访问宙启技术站
智能推送

PHP实现微信扫码支付功能

发布时间:2023-05-15 04:47:17

微信支付是一种便捷、快速的支付方式,它已被广泛应用于电商、票务、餐饮、旅游等领域。微信支付包含多种支付方式,其中扫码支付是一种非常常见的方式。本文将介绍如何使用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语言实现微信扫码支付功能的基本步骤。开发者可以根据实际需要对程序进行相应的修改和优化。