使用 Omnipay Wechatpay 在 WordPress 中增加微信支付-原生二维码支付方法
文 / @UTHEME
微信支付在WordPress中的应用
随着微信支付的不断普及,越来越多的人想在WordPress网站中增加微信支付功能。然而,由于微信官方SDK复杂难用,很多开发者面对它时望而却步。幸好,有一款名为Omnipay-wechatpay的第三方支付网关,由PHP大牛lokielse开发。本文将介绍如何在WordPress中使用Omnipay-wechatpay实现微信原生二维码支付。
安装OmnipayWechatpay
使用Composer安装OmnipayWechatpay。如果不熟悉Composer,可以先了解一下本站之前的文章《在WordPress主题或插件中使用phpComposer》。安装完成后,配置微信支付网关:
require_once(dirname(__FILE__).'/../vendor/autoload.php');
use Omnipay\Omnipay;
//获取微信支付网关的函数
function get_wechat_gateway(){
$gateway = Omnipay::create('WechatPay_Native');
$gateway->setAppId('xxxxxxxxxx'); //微信APPid
$gateway->setMchId('xxxxxxxxxxxxx'); //微信商户ID
$gateway->setApiKey('xxxxxxxxxxxxxxxx'); //微信支付key
return $gateway;
}
虽然这个函数也可以不写,直接在需要使用微信支付的地方创建支付网关也是可以的。但是,如果我们需要在多处用到支付网关,封装一个函数可以减少代码重复,也更方便配置和调试。
生成二维码
将订单数据提交给微信支付网关,生成二维码。这一步涉及一个叫做WordPress Dispatcher库的自定义URL生成器,具体实现方法可参考本站之前的文章《使用WordPress Dispatcher创建自定义URL》。为了调用方便,也可以使用自定义页面模板或WordPress AJAX API来创建URL。
new Dispatch([
'wechat_charge' => function($request){
$total_fee = trim($_GET['mount']);
$tn = order_no(); //订单号生成函数,需自行替换
$params = [
'out_trade_no' => $tn,
'notify_url' => 'http://www.wpzhiku.com/wechat_return/', //支付成功后接受通知的URL
'body' => '在线充值',
'total_fee' => $total_fee*100, //微信的单位是0.01,乘以100才是实际的订单金额
'spbill_create_ip' => '127.0.0.1',
'fee_type' => 'CNY',
];
//在真实的使用环境中,我们应该在这一步把订单数据保存到数据库,以便保留订单记录,在支付成功后更新订单状态。
$gateway = get_wechat_gateway();
$response = $gateway->purchase($params)->send();
$code_url = $response->getCodeUrl();
ob_start();
header('Content-Type:image/png');
//使用EndroidQrCode库生成二维码图片并输出到浏览器
$qrCode = new Endroid\QrCode\QrCode();
$qrCode->setText($code_url)
->setSize(128)
->setPadding(0)
->render();
$qr_output = ob_get_clean();
echo $qr_output;
exit;
},
]);
处理订单
根据微信支付网关的通知,判断订单状态并更新订单信息。因为我们在上一步没有保存订单数据到数据库,所以这里无法详细说明具体操作。但是,根据你的使用场景和业务逻辑进行判断即可。
new Dispatch([
'wechat_return' => function($request){
$gateway = get_wechat_gateway();
$response = $gateway->completePurchase([
'request_params' => file_get_contents('php://input')
])->send();
if($response->isPaid()){
echo '支付成功';
//$data是一个PHP数组,数组的内容就是支付成功后返回来的数据
$data = $response->getRequestData();
$out_trade_no = $data['out_trade_no'];
}
else{
echo '支付失败';
}
},
]);
Omnipay还支持支付宝和银联支付网关,支付宝支付网关的使用方法可以参考本站之前的文章《在WordPress中使用Omnipay-Alipay实现支付宝支付》。银联支付网关的使用方法也类似,有机会测试了再单独介绍。

相关文章
-
IDC/ISP办理许可证的基本条件(附:IDC和ISP许可证申请流程) 2023-06-07 08:00:01
-
利用tinymce.activeEditor获取到 WordPress可视化编辑器中的值(附:tinymce.activeEditor常见其他用法) 2023-06-06 08:00:02
-
WordPress是什么框架吗?WordPress是用什么写的? 2023-06-06 08:00:02
-
WordPress哪个版本稳定好用(附:如何查看当前WordPress版本) 2023-06-06 08:00:02
-
Automattic 发布 wp-now:由 WordPress Playground 提供支持的本地开发环境 2023-06-05 08:00:02
-
PHP预定义常量都有哪些(含常见PHP魔术常量) 2023-06-04 08:00:01
-
php的 require 和include 有什么区别 2023-06-04 08:00:01
-
UGPT插件:国内首个永久免费WordPress ChatGPT插件 2023-06-04 08:00:01
-
wordpress seo哪个插件好用 – WordPress SEO by Yoast 2023-06-03 08:00:02
-
WordPress古腾堡编辑器模块开发教程 2023-06-03 08:00:02