下面是关于“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技术站