微信支付的开发流程详解

yizhihongxing

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

  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日

相关文章

  • Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签

    Python3.7基于pycryptodome的AES加密解密 安装pycryptodome模块 pip install pycryptodome AES加密实现 from Crypto.Cipher import AES from Crypto.Util.Padding import pad from Crypto.Random import get_ra…

    python 2023年6月3日
    00
  • 基于Python实现一个简单的学生管理系统

    实现一个简单的学生管理系统可以分为以下步骤: 步骤一:需求分析 确定系统功能需求,比如添加学生信息、删除学生信息、修改学生信息、查询学生信息等。 定义学生信息包含的字段,比如姓名、年龄、性别、学号等。 步骤二:设计数据模型 根据需求分析,设计学生信息的数据模型,比如学生类(Student)。 每个学生对象包含的属性需要符合需求分析,比如姓名、年龄、性别、学号…

    python 2023年5月19日
    00
  • python下载图片实现方法(超简单)

    下面是对“python下载图片实现方法(超简单)”完整攻略的详细讲解: 标题 在markdown中,标题可以用“#”来表示,#个数表示标题的级别,一般从1到6级。例如: 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 代码块 在markdown中,可以使用三个反引号“`将一段代码包裹起来,以表示代码块。例如: import requests u…

    python 2023年5月19日
    00
  • 利用Python Matlab绘制曲线图的简单实例

    下面是《利用Python Matlab绘制曲线图的简单实例》的完整攻略。 1. 准备工作 在绘制曲线图之前,需要先安装相应的绘图库。这里我们介绍两个常用的库:matplotlib(Matlab风格的绘图库)和seaborn(基于matplotlib的高级可视化库)。可以使用以下命令来安装: !pip install matplotlib seaborn 2.…

    python 2023年5月19日
    00
  • python使用HTMLTestRunner导出饼图分析报告的方法

    Python使用HTMLTestRunner导出饼图分析报告的方法 在本文中,我们将介绍如何使用Python使用HTMLTestRunner库导出饼图分析报告。我们将使用unittest库编写测试用例,使用HTMLTestRunner库生成测试报告,并使用matplotlib库生成饼图。以下是详细的步骤和示例。 步骤1:安装必要的库 在使用Python使用H…

    python 2023年5月15日
    00
  • Python面向对象之成员相关知识总结

    下面就是详细讲解“Python面向对象之成员相关知识总结”的完整攻略: Python面向对象之成员相关知识总结 成员属性 实例属性 实例属性是绑定在对象上的,每一个对象可以拥有不同的实例属性,在函数内部以self进行访问。 class Car: def __init__(self): self.color = ‘white’ self.speed = 0 c…

    python 2023年6月3日
    00
  • Python multiprocessing.Manager介绍和实例(进程间共享数据)

    以下是“Python multiprocessing.Manager介绍和实例(进程间共享数据)”的详细攻略。 Python multiprocessing.Manager介绍 在Python中,多进程编程是一种常见的方式来提高程序的性能。但是,多进程之间的数据共享是一个挑战。为了解决这个问题,Python提供了multiprocessing.Manager…

    python 2023年5月13日
    00
  • 利用PyQt中的QThread类实现多线程

    利用PyQt中的QThread类实现多线程的攻略包括以下几个步骤: 导入必要的库 from PyQt5.QtCore import QThread, pyqtSignal 创建一个继承自QThread类的自定义线程类,并重写run()方法用于执行线程任务 class MyThread(QThread): # 自定义信号,用于将线程任务执行结果传递给主线程 u…

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