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

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

支付流程

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日

相关文章

  • JavaMail与Spring整合过程解析

    下面我将详细讲解“JavaMail与Spring整合过程解析”的完整攻略。 一、前言 JavaMail是用来发送和接收邮件的一个API,而Spring是Java的一个轻量级框架,提供了众多开发中需要的功能。JavaMail和Spring的整合可以让我们更加方便地使用JavaMail来处理邮件相关的业务逻辑。接下来,我将详细讲解JavaMail与Spring整…

    Java 2023年5月31日
    00
  • SpringData JPA的常用语法汇总

    下面我将为你详细讲解SpringData JPA的常用语法汇总。 1.概述 SpringData JPA是Spring框架的一个子项目,它提供了一种非常方便的方式来简化JPA的使用,降低了编写JPA代码的复杂度。SpringData JPA主要是基于JPA规范来实现的,并对JPA规范进行了一些扩展,提供了一些更为方便的API和方法。 2.常用语法汇总 2.1…

    Java 2023年5月20日
    00
  • 详解spring boot jpa整合QueryDSL来简化复杂操作

    下面我来为你详细讲解“详解spring boot jpa整合QueryDSL来简化复杂操作”的完整攻略。 什么是QueryDSL QueryDSL 是一个DSL query 框架,基于类型安全,可以使用 Java而非 SQL 来查询数据。它支持多种后端数据库,包括 MySQL,PostgreSQL 和 SQL Server。QueryDSL提供了一种比直接写…

    Java 2023年5月20日
    00
  • java定义数组的三种类型总结

    Java定义数组的三种类型 在 Java 中,定义数组有三种类型:一维数组、二维数组和不规则数组。这篇攻略将详细介绍这三种类型的定义方式及注意事项。 一维数组 一维数组是最常见的数组类型,可以理解为一个线性的排列方式。Java 中定义一维数组的方式如下: // 定义一个 int 类型的一维数组 int[] array1 = new int[5]; // 定义…

    Java 2023年5月26日
    00
  • IntelliJ IDEA中Scala、sbt、maven配置教程

    IntelliJ IDEA中Scala、sbt、maven配置教程 简介 IntelliJ IDEA是一款非常强大的IDE,可以支持多种编程语言。在其中配置Scala、sbt、maven,可以为Scala语言的开发提供较好的支持。 本文将详细讲解在IntelliJ IDEA中配置Scala、sbt、maven的过程。 Scala配置 安装Scala插件 在I…

    Java 2023年5月19日
    00
  • Springboot 2.6集成redis maven报错的坑记录

    下面是“Spring Boot 2.6集成Redis Maven报错的坑记录”的完整攻略: 问题描述 在使用Spring Boot 2.6版本集成Redis时,使用Maven安装Redis报错,提示找不到io.lettuce:lettuce-core:jar:6.2.5.RELEASE。 解决方案 修改pom.xml中的依赖 在pom.xml文件中添加io.…

    Java 2023年6月2日
    00
  • springboot2.2.2集成dubbo的实现方法

    Spring Boot2.2.2集成Dubbo的实现方法 Dubbo是一款高性能、轻量级的开源RPC框架,可以用于构建分布式服务架构。在Spring Boot2.2.2中,我们可以使用Dubbo来实现分布式服务。本文将详细讲解Spring Boot2.2.2集成Dubbo的实现方法,并提供两个示例。 1. 集成Dubbo 以下是集成Dubbo的基本流程: 在…

    Java 2023年5月15日
    00
  • Java多线程synchronized同步方法详解

    Java多线程synchronized同步方法详解 在Java多线程编程中,保证线程安全是一个必须面对的问题。synchronized是Java中最常用的线程同步机制之一,可以帮助我们对代码进行加锁,防止多个线程同时执行同一段代码,从而保证数据一致性。本篇攻略将详细讲解synchronized同步方法的使用方法。 什么是synchronized synchr…

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