PHP:微信小程序 微信支付服务端集成实例详解及源码下载

PHP:微信小程序微信支付服务端集成实例详解

在本文中,我们将为大家讲解如何在 PHP 中集成微信支付服务端,并包含了两个具体的示例。

准备工作

在开始集成之前,需要完成以下准备工作:

  1. 注册微信支付账号
  2. 在微信支付后台配置公众号或小程序,并设置回调地址
  3. 安装 curl 扩展

集成微信支付服务端

首先,我们需要在 PHP 代码中引用微信支付 SDK,可以使用 Composer 进行引用,也可以直接下载 SDK 手动引用。

统一下单

// 引入微信支付 SDK
require_once 'path/to/WxPay.Api.php';

// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody('商品名称');
$input->SetOut_trade_no('订单号');
$input->SetTotal_fee(1);
$input->SetNotify_url('回调地址');
$input->SetTrade_type('JSAPI');
$input->SetOpenid('用户 openid');

$result = WxPayApi::unifiedOrder($input);

在上述代码中,首先引入微信支付 SDK,然后构造一个统一下单实例,设置所需的参数,并通过 WxPayApi::unifiedOrder($input) 函数向微信支付接口提交请求,最后返回支付信息。

回调通知

// 引入微信支付 SDK
require_once 'path/to/WxPay.Api.php';

// 微信支付回调通知
$notify = new WxPayNotify();
$return = $notify->Handle(false);

if ($return) {
    // 回调成功,更新订单状态等操作
    echo 'success';
} else {
    // 回调失败,记录日志
    echo 'fail';
}

在上述代码中,首先引入微信支付 SDK,然后构造一个回调通知实例,调用 Handle 方法处理微信支付回调通知,判断是否处理成功,然后根据回调结果进行后续操作。

示例说明

以下我们给出两个示例。

示例一:微信小程序支付

前端代码:

wx.request({
    url: '服务端统一下单接口地址',
    data: {
        order_no: '订单号',
        total_fee: 1,
        openid: '用户 openid',
    },
    success: function (res) {
        wx.requestPayment({
            timeStamp: res.data.timeStamp,
            nonceStr: res.data.nonceStr,
            package: res.data.package,
            signType: res.data.signType,
            paySign: res.data.paySign,
            success: function(res) {
                // 支付成功回调
            },
            fail: function(res) {
                // 支付失败回调
            }
        })
    }
})

服务端代码:

// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody('商品名称');
$input->SetOut_trade_no($_POST['order_no']);
$input->SetTotal_fee($_POST['total_fee']);
$input->SetNotify_url('回调地址');
$input->SetTrade_type('JSAPI');
$input->SetOpenid($_POST['openid']);

$result = WxPayApi::unifiedOrder($input);

// 返回支付信息
$data = [
    'timeStamp' => strval(time()),
    'nonceStr' => $result['nonce_str'],
    'package' => 'prepay_id=' . $result['prepay_id'],
    'signType' => 'MD5',
    'paySign' => $result['pay_sign'],
];
echo json_encode($data);

在上述示例中,前端调用服务端的统一下单接口,服务端返回支付信息,前端使用 wx.requestPayment 进行支付,支付成功后执行回调。

示例二:自定义订单号

服务端代码:

$out_trade_no = '自定义订单号';

// 检测订单号是否存在,如果存在需要重新生成
while (is_order_no_exist($out_trade_no)) {
    $out_trade_no = generate_order_no();
}

// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody('商品名称');
$input->SetOut_trade_no($out_trade_no);
$input->SetTotal_fee(1);
$input->SetNotify_url('回调地址');
$input->SetTrade_type('JSAPI');
$input->SetOpenid('用户 openid');

$result = WxPayApi::unifiedOrder($input);

// 返回支付信息
$data = [
    'timeStamp' => strval(time()),
    'nonceStr' => $result['nonce_str'],
    'package' => 'prepay_id=' . $result['prepay_id'],
    'signType' => 'MD5',
    'paySign' => $result['pay_sign'],
];
echo json_encode($data);

在上述示例中,我们自定义订单号,并在统一下单接口中设置为使用自定义订单号进行支付,如果自定义订单号已存在,则重新生成。

源码下载

以上就是本文的详细攻略,源码可以前往 GitHub 下载:https://github.com/xxx/xxx

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP:微信小程序 微信支付服务端集成实例详解及源码下载 - Python技术站

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

相关文章

  • Java调试技术的作用是什么?

    Java调试技术是在开发过程中非常重要的一项技能,主要的作用是帮助开发者在程序出现问题时快速定位、排查和解决问题。下面是使用Java调试技术的完整攻略: 1. 开启调试模式 在Java程序中使用调试功能需要开启调试模式,可以通过在命令行中加入以下参数来开启调试模式: java -Xdebug -Xrunjdwp:transport=dt_socket,add…

    Java 2023年5月11日
    00
  • 常见的Java垃圾回收器有哪些?

    我们来详细讲解一下“常见的Java垃圾回收器有哪些?”这个问题的完整使用攻略。 问题背景 Java是一种垃圾自动回收语言,它通过垃圾回收器来自动管理内存。Java垃圾回收器根据内存使用情况,周期性地清理没有被引用的对象。Java垃圾回收器有多种不同的类型,每种类型都有其自身的特点和优劣势。 常见的Java垃圾回收器 Java垃圾回收器主要分为以下几种: Se…

    Java 2023年5月11日
    00
  • Java常用字符串工具类 字符串智能截取(3)

    Java常用字符串工具类 字符串智能截取(3) 引言 在Java开发中,字符串操作是我们最为常见的操作之一。字符串截取是字符串操作的重要之一。常规的字符串截取是通过String类的substring()方法来实现的。然而,当我们需要截取的字符串位置不确定时,怎么办?本篇文章将为大家介绍如何使用Java字符串智能截取工具类,满足大家的需求。 字符串智能截取 字…

    Java 2023年5月26日
    00
  • SpringBoot的三大开发工具小结

    接下来我为您详细讲解“SpringBoot的三大开发工具小结”的完整攻略。 前言 SpringBoot是一个高效、快速构建基于Spring框架的应用程序的工具。它支持简单的配置,使得开发者可以快速上手,专注于业务代码的编写。在SpringBoot的开发过程中,借助于一些开发工具可以大大提高开发效率和代码质量。本文将重点介绍SpringBoot的三种开发工具:…

    Java 2023年5月15日
    00
  • angular实现input输入监听的示例

    下面我将向你详细讲解如何使用Angular实现input输入监听的示例。 1. 为input添加ngModel指令 首先,我们需要在HTML页面中给input元素添加ngModel指令,利用双向绑定机制将输入的内容与组件中的属性相绑定,从而实现输入监听。 示例代码如下: <input type="text" [(ngModel)]=…

    Java 2023年6月15日
    00
  • Java之一文详解String字符串的用法

    Java之一文详解String字符串的用法 1. 什么是字符串(String)? 在 Java 语言中,字符串是一组用双引号括起来的字符序列,例如:”Hello World”。字符串是Java中的常见数据类型之一,类型名为String。 2. 如何声明字符串类型变量? 在 Java 中声明字符串类型变量,必须使用关键字String,例如: String st…

    Java 2023年5月26日
    00
  • 详解vue.js+UEditor集成 [前后端分离项目]

    详解 vue.js+UEditor 集成 [前后端分离项目] 的完整攻略,具体步骤如下: 1. 前置准备 在开始之前,我们需要先准备好以下工具和环境: Vue.js 2.0+ UEditor 1.4.3.3+ Vue-UEditor-wrapper 插件 Node.js 8.0+ Vue CLI 3.0+ Webpack 4.0+ 2. 安装 Vue-UEd…

    Java 2023年6月15日
    00
  • 深入理解Java的Spring框架中的IOC容器

    深入理解Java的Spring框架中的IOC容器 什么是IOC IOC全称 Inversion of Control,即控制反转。它是一种设计模式,用于减少计算机程序的耦合,使程序更加灵活,易于维护和扩展。在计算机程序中,对象之间的关系很密切,一个对象依赖于另一个对象,如果硬编码这些关系,就会造成程序的耦合度很高,不容易维护和扩展。而控制反转就是将这些对象之…

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