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

yizhihongxing

下面是关于“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日

相关文章

  • python和php哪个容易学

    Python和PHP都是非常有用的编程语言,但是对于初学者来说,可能会被这两个语言的差异所迷惑,不知道应该选择哪个作为自己的第一门编程语言学习。 在选择学习Python或PHP之前,我们需要先了解这两个语言的特点和应用场景,以及自己的需求和兴趣,从而做出正确的选择。 Python和PHP的特点 Python 语法简单、易学易用,是一门功能强大的高级编程语言;…

    PHP 2023年5月24日
    00
  • PHP正则表达式基本函数 修饰符 元字符和需转义字符说明

    在PHP中,正则表达式是处理文本的重要工具,主要用于搜索、替换和验证文本数据。下面是关于PHP正则表达式的基本函数、修饰符、元字符和需转义字符的详细讲解。 基本函数 在PHP中,正则表达式的常用基本函数有preg_match、preg_match_all、preg_replace和preg_split等。 preg_match preg_match函数用于做…

    PHP 2023年5月26日
    00
  • php计算函数执行时间的方法

    要计算PHP函数的执行时间,有许多方法可供选择。以下是其中一些常用的方法: 1.使用microtime函数 1.使用microtime()函数,可以获取当前时间的微秒数,从而计算函数的执行时间。 $start = microtime(true); // 执行一些函数代码… $end = microtime(true); $diff = $end – $s…

    PHP 2023年5月26日
    00
  • PHP异步调用socket实现代码

    PHP异步调用socket实现是一种提高代码性能的方法,能够同时处理多个客户端请求,提高服务器的吞吐量。下面是实现这种方式的完整攻略: 一、安装需要的扩展 安装swoole扩展 pecl install swoole 安装event扩展 pecl install event 二、实现异步socket服务端 在服务端代码中,需要使用swoole与event两个…

    PHP 2023年5月23日
    00
  • PHP实现ASCII码与字符串相互转换的方法

    ASCII码转字符串 在PHP中,可以使用chr()函数将ASCII码转换成字符。chr()需要一个整数参数,它将返回该整数对应的ASCII字符。以下是将整数65(ASCII码为大写字母A)转换成字符的示例代码: $ascii = 65; $char = chr($ascii); echo $char; // 输出 A 字符串转ASCII码 在PHP中,可以…

    PHP 2023年5月26日
    00
  • PHP输出缓冲与header发送问题详解

    PHP输出缓冲与header发送问题在Web开发中是一个很常见的问题。本文将详细讲解如何理解输出缓冲和header发送以及如何解决由此引发的问题。 什么是输出缓冲? 在PHP中,当代码向浏览器发送输出时,在输出内容到达浏览器之前,PHP会在内存中先暂存一段时间。这样做的原因是为了避免在输出数据较大的情况下重复使用write()代码。 当你使用echo、pri…

    PHP 2023年5月26日
    00
  • php后台程序与Javascript的两种交互方式

    PHP后台程序和Javascript之间有两种交互方式:同步和异步。在这里,我们将为您提供完整的攻略,帮助您深入了解这两种交互方式的使用。 同步交互 同步交互是指浏览器和服务器之间的交互方式,该方式需要在同一时间内处理所有请求。在PHP中,同步交互可以使用 XMLHttpRequest 对象实现。下面是一个简单的示例: // HTML代码 <butto…

    PHP 2023年5月23日
    00
  • php动态生成JavaScript代码

    要实现在 PHP 中动态生成 JavaScript 代码,有几个基本步骤: PHP 生成 JavaScript 代码时,需要使用字符串拼接的方式,将 JavaScript 代码以字符串的方式拼接起来。 PHP 中的字符串中如果包含 JavaScript 字符串中的特殊字符,例如双引号、单引号、反斜杠等,需要进行转义,以避免出现语法错误。可以使用转义字符 \ …

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