微信小程序支付及退款流程详解

微信小程序支付及退款流程详解

支付流程

1. 获取openid

在发起支付前,需要获取用户的openid。可以通过调用微信官方提供的登录接口wx.login(),在获取到临时登录凭证code后,再通过调用wx.request()接口向服务器发送请求,从而获取用户的openid。

示例代码:

wx.login({
  success: function(res) {
    if (res.code) {
      wx.request({
        url: 'https://api.weixin.qq.com/sns/jscode2session',
        data: {
          appid: 'YOUR_APP_ID',
          secret: 'YOUR_APP_SECRET',
          js_code: res.code,
          grant_type: 'authorization_code'
        },
        success: function(res) {
          console.log(res.data)
          // 获取openid
          var openid = res.data.openid;
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

2. 创建订单

创建订单需要向自己的后台服务器发送请求,由后台服务器调用微信支付统一下单接口,返回预付单信息。

示例代码:

// 向微信支付统一下单接口发送请求
$post_data = array(
    'appid' => 'YOUR_APP_ID',
    'mch_id' => 'YOUR_MCH_ID',
    'nonce_str' => '随机字符串',
    'body' => '商品描述',
    'out_trade_no' => '商户订单号',
    'total_fee' => '订单金额',
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
    'notify_url' => '支付结果通知url',
    'trade_type' => 'JSAPI',
    'openid' => $openid
);
$post_data['sign'] = sign($post_data, 'YOUR_APP_KEY');

$xml = arrayToXml($post_data);
$response = postXmlCurl('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);

// 解析微信支付统一下单接口返回的结果
$result = xmlToArray($response);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
    // 获取预支付交易会话标识
    $prepay_id = $result['prepay_id'];
    $nonceStr = createNonceStr();

    // 生成签名
    $data = array(
        'appId' => 'YOUR_APP_ID',
        'timeStamp' => strval(time()),
        'nonceStr' => $nonceStr,
        'package' => 'prepay_id=' . $prepay_id,
        'signType' => 'MD5'
    );
    $data['paySign'] = sign($data, 'YOUR_APP_KEY');

    // 将支付参数返回给小程序
    echo json_encode($data);
} else {
    echo $result['return_msg'];
}

3. 发起支付

通过wx.requestPayment()接口发起支付。

示例代码:

wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success: function(res) {
    console.log('支付成功!')
  }
})

退款流程

1. 创建退款订单

在小程序后台管理界面设置退款规则,用户申请退款后,小程序会向自己的后台服务器发送请求,由后台服务器调用微信支付申请退款接口,返回退款结果。

示例代码:

// 向微信支付申请退款接口发送请求
$post_data = array(
    'appid' => 'YOUR_APP_ID',
    'mch_id' => 'YOUR_MCH_ID',
    'nonce_str' => '随机字符串',
    'out_trade_no' => '商户订单号',
    'out_refund_no' => '商户退款单号',
    'total_fee' => '订单金额',
    'refund_fee' => '退款金额',
    'refund_desc' => '退款原因',
    'refund_account' => '退款资金来源',
);
$post_data['sign'] = sign($post_data, 'YOUR_APP_KEY');

$xml = arrayToXml($post_data);
$response = postXmlCurl('https://api.mch.weixin.qq.com/secapi/pay/refund', $xml);

// 解析微信支付申请退款接口返回的结果
$result = xmlToArray($response);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
    echo '退款成功';
} else {
    echo $result['return_msg'];
}

2. 查询退款订单状态

调用微信支付查询退款接口查询退款订单状态。

示例代码:

// 向微信支付查询退款接口发送请求
$post_data = array(
    'appid' => 'YOUR_APP_ID',
    'mch_id' => 'YOUR_MCH_ID',
    'nonce_str' => '随机字符串',
    'out_trade_no' => '商户订单号',
);
$post_data['sign'] = sign($post_data, 'YOUR_APP_KEY');

$xml = arrayToXml($post_data);
$response = postXmlCurl('https://api.mch.weixin.qq.com/pay/orderquery', $xml);

// 解析微信支付查询退款接口返回的结果
$result = xmlToArray($response);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
    if ($result['refund_status_0'] == 'SUCCESS') {
        echo '退款成功';
    } else {
        echo '退款失败';
    }
} else {
    echo $result['return_msg'];
}

示例说明

支付流程

假如某个用户在你的小程序中购买了一件商品,价格为99元,订单号为1234567890。那么支付流程如下:

  1. 用户点击“立即购买”按钮,小程序调用wx.login()接口,获取用户的openid。

  2. 小程序向自己的后台服务器发送请求,由后台服务器调用微信支付统一下单接口,返回预付单信息。预付单信息中包含了相关的支付参数,如:时间戳、随机字符串、预支付交易会话标识等。

  3. 小程序通过wx.requestPayment()接口发起支付,用户需要输入密码完成支付。

  4. 支付成功后,微信服务器通知小程序的服务器支付成功的消息,并携带支付订单信息。

  5. 小程序的后台服务器收到支付成功的消息后,更新订单状态,并向用户发送支付成功的消息。

退款流程

假如某个用户购买了你的小程序中的一件商品,并申请退款。那么退款流程如下:

  1. 用户在小程序中申请退款,小程序会向自己的后台服务器发送请求。

  2. 后台服务器调用微信支付申请退款接口,返回退款结果。

  3. 后台服务器调用微信支付查询退款接口,查询退款订单状态。

  4. 如果退款成功,则更新订单状态,并向用户发送退款成功的消息。如果退款失败,则向用户发送退款失败的消息。

以上就是微信小程序支付及退款流程的详细攻略。希望对你有所帮助。

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

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Ajax添加数据与删除篇实现代码

    下面详细讲解“Ajax添加数据与删除篇实现代码”的完整攻略。 一、准备工作 在正式开始编写Ajax添加数据与删除篇的实现代码前,需要先完成以下准备工作: 确保你已经学习过Ajax基础知识,包括Ajax的基本流程、请求方式、回调函数等等。 确定添加数据与删除篇功能需要操作的数据表格,包括表格名称、字段名称等等。 熟悉服务器端处理Ajax请求的技术,例如PHP、…

    Java 2023年6月15日
    00
  • java中map和对象互转工具类的实现示例

    下面是”Java中Map和对象互转工具类的实现示例”的详细攻略: 1. 什么是Map和对象互转工具类? Map和对象互转工具类是Java编程中的一种实用工具,用于实现Map结构与Java对象之间的转换,便于数据的处理和传递。通过Map与Java对象之间的相互转换,我们可以更加方便地对数据进行处理和传递。 2. 如何实现Map和对象互转工具类? 我们可以使用反…

    Java 2023年5月26日
    00
  • 详细解读Hibernate的缓存机制

    详细解读Hibernate的缓存机制 Hibernate作为一个优秀的对象关系映射工具,其具有强大的缓存机制,对于提高系统性能有很大的作用。但是,如果我们不了解它的缓存机制以及所带来的优缺点,可能会导致系统性能下降,因此对于Hibernate的缓存机制需要进行详细的解读。 1. Hibernate的缓存机制 Hibernate的缓存机制可以分为三层,分别是一…

    Java 2023年5月19日
    00
  • Spring-webflux 响应式编程的实例详解

    Spring-webflux 响应式编程的实例详解 响应式编程的概念 响应式编程是一种处理异步数据流的编程范式,其主要思想是通过数据流的变化来触发相应的操作。这种编程模型可以帮助我们更加高效地处理并发、I/O密集型的操作,对于微服务架构的实现尤其有帮助。 Spring-webflux概述 Spring-webflux是基于响应式编程的Spring框架的一个子…

    Java 2023年6月3日
    00
  • java实现计算器功能

    Java是一种高级编程语言,通过使用Java代码可以实现计算器的功能。下面是实现计算器功能的详细攻略: 1. 设计思路 要实现计算器的功能,需要考虑以下问题: 如何获取用户的输入; 如何进行计算; 如何将计算结果输出给用户。 解决以上问题,我们可以设计一个基本的计算器功能,并将其分为三个部分: 一个界面,用于显示计算器的操作和计算结果; 一个模块,用于读取用…

    Java 2023年5月18日
    00
  • Maven Repository仓库的具体使用

    Maven是Java项目中流行的构建工具,常用于自动化构建、依赖管理等操作。而Maven Repository(Maven仓库)则是Maven中可用依赖(dependency)和插件(plugin)的存储位置。在Maven项目中,需要使用某个依赖或插件时,Maven会去检查Repository中是否已经存在该资源,如果有则进行下载,否则会给出错误提示。本文将…

    Java 2023年6月2日
    00
  • Java中classpath讲解及使用方式

    Java中classpath讲解及使用方式 什么是classpath? classpath是一个环境变量,用于告诉Java虚拟机在哪里查找已编译的类文件。在Java中,类文件通常存储在文件系统中的某个位置,classpath指定了Java在哪里查找这些文件。通过设置classpath,我们可以使Java VM在任何地方都能找到所需的类文件。 classpat…

    Java 2023年5月26日
    00
  • java JSON解析库Alibaba Fastjson用法详解

    Java JSON解析库Alibaba Fastjson用法详解 JSON作为一种轻量级的数据交换格式,被广泛应用于各种应用中。而Alibaba Fastjson作为一个性能优越、使用简单的JSON解析库,受到了开发者的喜爱。本文将详细讲解Fastjson的使用方法。 前置知识 在使用Fastjson之前,需要了解一些相关的知识: JSON格式(了解其基本结…

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