使用Omnipay Wechatpay 在 WordPress 中增加微信支付-原生二维码支付方法

使用Omnipay Wechatpay 在 WordPress 中增加微信支付-原生二维码支付方法

使用Omnipay Wechatpay 在 WordPress 中增加微信支付-原生二维码支付方法

微信支付越来越流行了,很有赶超支付宝的兆头,很多朋友想在 WordPress 网站中增加微信支付功能,可是微信官方的 SDK 非常难用,光看文档就令很多想使用微信支付的开发者望而却步了。万幸我们有Omnipay,Omnipay-wechatpay 是 Omnipay 的一个第三方支付网关,由 PHP 大牛 lokielse 开发,我们今天来简单介绍一下怎么使用Omnipay-wechatpay 在 WordPress 中增加微信原生二维码支付。

首先,通过 Composer 安装 Omnipay Wechatpay

如果不知道怎么使用 Composer,建议先看一下本站之前的文章在WordPress主题或插件中使用php Composer。如果你已经配置好 Composer 了,直接运行下面的命令,Composer 就会自动帮你安装 omnipay-wechatpay。

composer require lokielse/omnipay-wechatpay

安装完成后,我们来配置一下微信支付网关:

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;
}

其实这个函数也可以用不写,直接在需要使用微信支付的地方创建支付网关也可以,但是我们需要在多处用到支付网关,把创建支付网关的代码封装在一个函数里可以减少重复代码,也更方便配置和调试。

第二步,提供订单数据,生成二维码

这一步所做的操作就是把订单数据提交给微信支付网关,然后根据微信网关返回的信息生成二维码。用户使用微信扫描二维码即可支付订单。

这一步和第三步中使用的生成自定义 URL 的方法使用的是 WordPress Dispatcher 库,当然,你也可以使用自定义页面模板或者 WordPress AJAX API 创建URL。

new Dispatch( [

    'wechat_charge' => function ( $request ) {

        $total_fee = trim( $_GET[ 'mount' ] );
        $tn = order_no(); //这里的 order_on() 是生成订单号的函数,请用自己的函数代替

        $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');

        // 输入生成的二维码到浏览器,这里用到了Endroid QrCode 库来生成二维码,也可以使用其他的库代替
        $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 除了 omnipay-wechatpay 这个微信支付网关,还有支付宝和银联支付网关,支付宝支付网关的使用方法在本站之前的文章:在 WordPress 中使用 Omnipay-Alipay 实现支付宝支付 中已经介绍过了,银联支付网关的使用方法也大同小异,等以后有机会测试了,再另外发文章介绍。

本站提供 WordPress 主题定制开发服务

本站长期承接WordPress主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有7年 WordPress 开发经验, 如果你想用 WordPress 开发网站, 请联系 QQ: 470266798 或邮箱: 4626395@gmail.com 咨询。

当前有 1 条评论 ;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*