ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解

下面是关于“ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解”的完整攻略:

什么是扫码支付模式二

扫码支付模式二是微信支付的一种支付方式,由商户生成支付二维码,用户用微信扫描二维码后完成支付。

ThinkPHP框架整合微信支付之Native 扫码支付模式二

第一步:安装微信支付SDK

composer require "thenbsp/wechat"

第二步:创建NativeController控制器类

<?php
namespace app\index\controller;

use wechat\NativePay;
use wechat\WXPayConfig;
use wechat\log\WXLogFileHandler;
use Monolog\Logger;

class NativeController extends BaseController
{
    private $logger;

    public function __construct()
    {
        $this->logger = new Logger('weixin');
        $this->logger->pushHandler(new WXLogFileHandler(WXPayConfig::getLogPath()));
    }

    public function index()
    {
        $notify = new NativePay();
        $input = new WXPayUnifiedOrder();
        $input->setBody("test");
        $input->setAttach("test");
        $input->setOutTradeNo(WXPayConfig::generateNonceStr());
        $input->setTotalFee("1");
        $input->setTimeStart(date("YmdHis"));
        $input->setTimeExpire(date("YmdHis", time() + 600));
        $input->setGoodsTag("test");
        $input->setNotifyUrl("http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php");
        $input->setTradeType("NATIVE");
        $input->setProductId("123456789");

        $result = $notify->getPayUrl($input);
        $url = $result["code_url"];

        if ($url) {
            $this->logger->addInfo("url: " . $url);
            $this->assign('url', $url);
        } else {
            $this->logger->addInfo("failed to get payurl");
        }

        return view('index');
    }
}

第三步:配置微信支付信息

WXPayConfig.php文件中配置微信支付信息,如下所示:

<?php
namespace wechat;

class WXPayConfig
{
    const APPID = 'your app id';
    const MCHID = 'your mch id';
    const KEY = 'your key';
    const APPSECRET = 'your app secret';
    const SSLCERT_PATH = 'path/to/sslcert.pem';
    const SSLKEY_PATH = 'path/to/sslkey.pem';
    const NOTIFY_URL = 'http://domain.com/notify';
    const CURL_TIMEOUT = 30;

    public static function generateNonceStr($length = 32)
    {
        // 生成随机字符串
    }

    public static function getLogPath()
    {
        // 获取日志路径
    }
}

第四步:创建支付页面

我们可以在index.html文件中创建支付页面,如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>微信支付</title>
</head>
<body>
    <h1>扫码支付模式二</h1>
    <img src="{:urldecode($url)}" />
</body>
</html>

第五步:测试运行

在浏览器输入http://localhost/index.php/index/native/index,能够成功创建支付页面并显示二维码,说明整合微信支付成功。

示例说明

示例一:生成随机字符串

<?php
namespace wechat;

class WXPayConfig
{
    // 生成随机字符串
    public static function generateNonceStr($length = 32)
    {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $nonce_str = "";
        for ($i = 0; $i < $length; $i++) {
            $nonce_str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $nonce_str;
    }
}

在这个示例中,我们使用substr函数取随机字符串字符,然后使用mt_rand函数添加它们到一个字符串变量中,最后返回这个字符串。

示例二:获取日志路径

<?php
namespace wechat;

class WXPayConfig
{
    // 获取日志路径
    public static function getLogPath()
    {
        // 设置日志路径
        $log_dir = dirname(__DIR__) . "/logs/";
        if (!file_exists($log_dir)) {
            mkdir($log_dir, 0775, true);
        }

        return $log_dir . "weixin_" . date('Y-m-d', time()) . ".log";
    }
}

在这个示例中,我们使用dirname__DIR__函数来设置日志目录路径,如果目录不存在,则使用mkdir函数创建目录。最后,将日志文件名作为字符串返回。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解 - Python技术站

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

相关文章

  • 浅析ThinkPHP的模板输出功能

    当我们使用ThinkPHP框架进行开发时,经常会用到模板输出功能。本文将对ThinkPHP的模板输出功能进行浅析。 什么是模板输出? 模板输出是指将经过处理后的数据以指定的格式输出到前端页面上。在ThinkPHP中,使用模板引擎来实现模板输出功能。 ThinkPHP中的模板引擎 ThinkPHP中提供了两种常用的模板引擎:原生PHP模板引擎和Smarty模板…

    PHP 2023年5月26日
    00
  • PHP下escape解码函数的实现方法

    PHP下escape解码函数的实现方法 什么是escape编码? escape编码是指将字符串中的某些字符转换为以“%”符号表示的十六进制ASCII值,并在前面加上“%”符号。这种编码方法常用于URL参数传递、HTML的attribute和某些邮箱协议。 例如,对于字符串“ hello world !”,如果使用escape编码,就会得到“%20hello%…

    PHP 2023年5月27日
    00
  • PHP 创建文件(文件夹)以及目录操作代码

    下面我将详细讲解如何使用PHP创建文件和文件夹,以及如何操作目录。 创建文件 要在PHP中创建文件,可以使用fopen()函数创建文件并返回文件指针,然后使用fwrite()函数将要写入文件的内容写入文件,最后使用fclose()函数关闭文件。 以下是一个示例代码,创建一个名为test.txt的文件并在其中写入一些字符串: $filename = ‘test…

    PHP 2023年5月23日
    00
  • 解析PHP之提取多维数组指定列的方法

    接下来我将详细讲解“解析PHP之提取多维数组指定列的方法”的完整攻略。 前言 PHP是一种服务器端脚本语言,其中数组是其最常用的数据类型之一。在PHP开发过程中,开发者经常需要从多维数组中提取指定的一列,这时候就需要使用PHP的相关函数来实现这个功能了。 方法一:使用foreach循环 使用foreach遍历多维数组,然后将指定列的值取出来,再组成一个新的数…

    PHP 2023年5月26日
    00
  • 如何离线执行php任务

    如何离线执行 PHP 任务 如果你需要离线执行 PHP 任务,其中比较好的方式就是使用 Cron 定时任务。Cron 可以帮助我们在指定的时间点自动运行 PHP 脚本,从而达到离线执行 PHP 任务的目的。 下面是使用 Cron 定时任务离线执行 PHP 任务的具体攻略: 1. 编写 PHP 脚本 首先,我们需要编写一个需要离线执行的 PHP 脚本,这里以简…

    PHP 2023年5月23日
    00
  • 十天学会php(3)

    十天学会php(3)攻略 Day 1 学习内容 PHP常量 PHP运算符 PHP条件语句 解释说明 PHP常量:常量是一个固定的值,一旦定义后就不能再次修改,使用define()函数来定义。 PHP运算符:PHP支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。 PHP条件语句:if语句、if…else语句、switch语句等。 示例代码 常量 …

    PHP 2023年5月23日
    00
  • PHP实现的ID混淆算法类与用法示例

    下面就为大家详细讲解“PHP实现的ID混淆算法类与用法示例”的完整攻略。 标题 什么是ID混淆算法? ID混淆算法指的是将某一数据的ID进行加密转换,使其不易被识别破解,从而提高数据的安全性。 PHP实现的ID混淆算法类与用法示例 PHP是一种高效的服务器端编程语言,具有优秀的拓展性和可读性,因此很适合实现ID混淆算法。 在PHP中,我们可以通过自己编写代码…

    PHP 2023年5月26日
    00
  • PHP实现下载远程图片保存到本地的方法

    实现下载远程图片保存到本地的方法,可以采用PHP的curl库来实现。具体步骤如下: 步骤一:开启curl扩展 在PHP中使用curl库,需要开启curl扩展。如果你的PHP环境中没有安装curl扩展,可以在php.ini配置文件中添加如下配置: extension=curl.so (Linux) extension=curl.dll (Windows) 步骤…

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