微信支付的开发流程详解

微信支付的开发流程分为以下几步:

  1. 注册微信商户号: 在微信支付平台注册商户号,需要提供一些基本信息,如公司信息、联系人信息等。注册后,商户号会得到一个唯一标识的APPID和APPSECRET,同时需要进行身份认证。

  2. 配置支付参数: 登录微信支付平台,在“开发配置”中配置支付相关参数,包括支付密钥、支付通知接口等。同时需要设置支付的回调通知地址,当用户支付成功时,微信会向该地址发送一个HTTP POST请求,通知商户支付结果。

  3. 调用统一下单接口: 商户在自己系统中开发调用微信支付下单的接口,该接口需要向微信支付系统提交一些订单信息,并传递商户号和带签名的支付参数。微信支付系统会对接收到的参数进行校验和签名,验证通过后,返回一个交易会话ID,即prepay_id。

  4. 生成支付二维码: 商户根据prepay_id生成所需的支付二维码,展示给用户扫描支付。

  5. 用户支付并回调通知: 用户扫描支付二维码后,在微信客户端完成支付。当支付成功时,微信会向商户设置的支付回调通知地址发送HTTP POST请求,通知商户支付结果。

  6. 查询支付状态: 商户可以通过调用微信支付的支付查询接口,查询支付结果,同时可以进行退款操作。

下面是两条实现微信支付的示例:

示例一:

假设商户已经完成了前三步,我们需要调用微信支付的下单接口,获取prepay_id:

// 注:php代码示例
// 组装请求数据,请求参数文档详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
$data = [
    'appid'            => $appid,
    'mch_id'           => $mch_id,
    'nonce_str'        => $nonce_str,
    'body'             => $body,
    'out_trade_no'     => $out_trade_no,
    'total_fee'        => $total_fee,
    'spbill_create_ip' => $spbill_create_ip,
    'notify_url'       => $notify_url,
    'trade_type'       => 'NATIVE'
];
$data['sign'] = $this->makeSign($data, $pay_key); // 给请求加上签名
$xml = $this->toXml($data);

// 发送支付请求,请求参数以xml格式传递,响应数据也以xml格式返回
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$response = $this->postXmlCurl($xml, $url);

成功获取到prepay_id后,就可以生成支付二维码了:

// 注:php代码示例
// 用prepay_id生成二维码
$code_url = $response['code_url'];
$qrCode = new \Endroid\QrCode\QrCode($code_url);
header('Content-Type: ' . $qrCode->getContentType());
echo $qrCode->writeString();

示例二:

当用户完成支付并回调通知时,微信支付会向商户设置的notify_url发送一个HTTP POST请求,通知商户支付结果。商户需要验证请求的签名、处理请求的业务逻辑,并给微信支付发送响应消息(必需)。

// 注:php代码示例
// 通知请求示例数据(请求回调的xml格式数据)详见 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7&index=8

$xml = file_get_contents('php://input');
$data = $this->fromXml($xml);

// 验证请求的签名
if ($this->checkSign($data, $pay_key)) {
    // 处理请求业务逻辑
    file_put_contents('/tmp/pay.log', json_encode($data), FILE_APPEND);

    // 将处理结果发送给微信支付
    $result = [
        'return_code' => 'SUCCESS',
        'return_msg'  => 'OK'
    ];
    $xml = $this->toXml($result);
    echo $xml;
} else {
    // 签名验证失败,通知微信支付,请求失败
    $result = [
        'return_code' => 'FAIL',
        'return_msg'  => 'Invalid sign'
    ];
    $xml = $this->toXml($result);
    echo $xml;
}

以上是微信支付的开发流程及两个示例,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信支付的开发流程详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 两行Python代码实现pdf转word功能

    以下是详细讲解“两行Python代码实现pdf转word功能”的完整攻略。 1. 安装 pytesseract 和 pypdf2 模块 使用 pip 指令安装 pytesseract 和 pypdf2 模块,前者用于 OCR 图像文字识别,后者用于读取 PDF 文件内容,指令如下: pip install pytesseract pypdf2 2. 编写 P…

    python 2023年6月5日
    00
  • python实现删除文件与目录的方法

    下面是关于 Python 实现删除文件和目录的详细攻略。 删除文件 在 Python 中,我们可以使用 os 模块中的 remove() 方法来删除文件。 import os os.remove(‘temp.txt’) 当你运行上述代码时,Python 将会删除名为 temp.txt 的文件。如果文件不存在,会抛出 FileNotFoundError 异常。…

    python 2023年6月2日
    00
  • Python Socket实现简单TCP Server/client功能示例

    下面是详细的Python Socket实现简单TCP Server/client功能示例的攻略。 1. 简介 Python中的Socket模块提供了许多套接字函数和类,可以支持网络编程。通过使用Socket,Python可以不依赖于Java或C++实现了自己的网络协议,方便快捷地进行网络应用开发。本文将介绍如何使用Python的Socket模块实现一个简单的…

    python 2023年5月19日
    00
  • 如何在python中判断变量的类型

    判断变量的类型在Python中是非常常见的操作。下面是判断Python中变量类型的完整攻略。 使用type()函数 Python内置的type()函数可以返回传入变量的类型。使用方法如下: variable = "string" print(type(variable)) # <class ‘str’> 如上,variable…

    python 2023年5月14日
    00
  • 将音频输出从一个函数重定向到python中的另一个函数

    【问题标题】:Redirecting audio output from one function to another function in python将音频输出从一个函数重定向到python中的另一个函数 【发布时间】:2023-04-06 23:18:02 【问题描述】: 假设我有两个函数来自两个不同的 API,函数 A 和 B。 默认情况下,函数…

    Python开发 2023年4月7日
    00
  • 快速解决PyCharm无法引用matplotlib的问题

    下面是关于快速解决PyCharm无法引用matplotlib的问题的完整攻略: 1. 确认matplotlib已经安装并可用 在PyCharm中无法引用matplotlib最常见的原因是没有安装该库或者安装出现问题。因此,在解决无法引用matplotlib的问题之前,请先确认matplotlib已经安装并可用。 可以使用以下命令来检查matplotlib是否…

    python 2023年5月13日
    00
  • python中用shutil.move移动文件或目录的方法实例

    当我们需要将文件或目录从一个位置移动到另一个位置时,可以使用python标准库中的shutil模块来对文件或目录进行移动操作。shutil提供了许多方便的方法来处理文件和目录,其中move()函数可以用来移动文件或目录。 函数介绍 shutil.move(src, dst, copy_function=copy2) src:需要移动的源文件或目录; dst:…

    python 2023年6月2日
    00
  • 如何在 Redis 中使用哈希表存储数据?

    在 Redis 中,哈希表是一种非常常见的数据结构,可以用于存储和管理键值对。哈希表可以将多个键值对存储在一个 Redis 键中,这样可以减少 Redis 数据库中的键数量,提高 Redis 数据库的性能。在本文中,我们将介绍如何在 Redis 中使用哈希表存储数据的完整使用攻略,包括创建哈希表、添加和获取键值对、删除键值对等。 步骤1:连接 Redis 数…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部