站点要开通微信在线支付接口,微信、支付宝两大支付巨头都需要具备营业执照才可申请。对于个人站长而言,意味着麻烦和需要养执照的问题,运营初期为了节约成本,将站点和Payjs对接是不错的解决方案。

本实例属于二开,但改动的不多,记录好修改的文件,升级的时候替换就可以。

一、前提,去payjs官网注册并获得商户号、通信密钥。

二、处理cms微信支付判断:

application/admin/template/member/pay_set.htm
注释后台配置页面不需要的字段及js提交判断,然后剩下的两个字段填入你的商户号(wechat[mchid])和密钥(wechat[key])

eyoucms对接Payjs_第1张图片

eyoucms对接Payjs_第2张图片

eyoucms对接Payjs_第3张图片

eyoucms对接Payjs_第4张图片

application/admin/controller/Member.php
注释后端方法的判断,这样只有两个字段的情况下才能显示支付按钮

eyoucms对接Payjs_第5张图片

三、处理控制器

application/user/controller/Pay.php
当用户点击支付按钮,会调用控制器(controller/Pay.php)中二维码的请求方法pay_wechat_png,把订单数据传到支付方法(model/Pay.php)中打包后发给payjs。

所以我们需要更改pay_wechat_png把打包方法替换掉

eyoucms对接Payjs_第6张图片

继续走到了下面的方法四。

四、处理model

application/user/model/Pay.php
这里只是把原来的payForQrcode二维码请求复制出来做个修改,变成适合payjs的请求。

eyoucms对接Payjs_第7张图片

public function payjs($out_trade_no,$total_fee){
        // 获取微信配置信息
        $pay_wechat_config = getUsersConfigData('pay.pay_wechat_config');
        if (empty($pay_wechat_config)) {
            return false;
        }

        $globalConfig = tpCache('web.web_name');
        $web_name = !empty($globalConfig) ? $globalConfig : '支付';
        $data['body']         = $web_name;
        $data['out_trade_no'] = $out_trade_no;
        $data['total_fee']    = $total_fee * 100;
        $data['notify_url']   = request()->domain().'/Payself.php';

        $ret = model('Payself')->native($data);

        if($ret['return_code'] == 1 && $ret['return_msg'] == 'SUCCESS') {
            return $ret['code_url'];
        } else {
            return $ret;
        }
    }

到这一步,我们已经成功显示了一个二维码,把订单数据发到服务端进行支付处理了。处理完(用户支付完毕)我们需要接收服务端返回来的数据,接收文件就是上面写的Payself.php。psyjs官方提供了很多接收回调的实例,大家可以去找找看。

因为是二开,为了不过多改动易优的代码,给以后升级带来麻烦,这里的实现思路是显示二维码后,去循环请求一个json文件。接收回调回来的数据验证后写入这个json文件,可以根据自己的需要写入判断条件。用户页面上循环请求到json中有对应的订单则进行订单状态更改存库完成支付。

好了,经验来之不易,请多关照

原文 hbh.cool/find/145.html