快充宝接入

快充宝


单收款码处理,需要输入金额和备注

<?php
namespace app\index\controller;

use think\Controller;
use think\Db;

class Miaochongbao extends Controller
{
    function return () {
        # 使用前提
        #
        #    1、支付宝扫描给你的二维码,申请收钱码,保存到手机相册。
        #    2、登陆入口 接口地址下面 支付宝刷新时间修改为12000 保存配置
        #    3、开始运行下面开通商户。
        #    4、支付宝开始运行下面,设置自动登陆 。
        #    5、然后同时勾选受限12345(最新版本支持多选循环)勾选补单 选择时间 补单下。

        #    受限3必须开通商户,受限45必须申请收钱码

        # 软件填写地址
        # http://你的域名/index/xxxx/return?name=#name&tno=#tno&money=#money&sign=#sign&key=123456789
        $order_sn   = trim(input('name')); # 支付备注name,可以是uid或者order_sn
        if (empty($order_sn)) {
        	exit();
        }
        $tno        = input('tno');
        $real_money = input('money'); # 交易支付金额
        $sign       = input('sign'); # 对比用
        $key        = input('key'); # 对比用
        # 其他
        $typ  = input('typ'); // 1手工 2支付宝 3财付通 4手机QQ  5微信
        $isSg = input('isSg'); // 1软件人工界面提交 0软件检测自动提交
        $isQr = input('isQr'); // 1二维码扫描 0直接转账
        # 验证
        $key        = '123456789'; # 软件上和网站加密串设置保存一致
        $MD5_str    = 'md5key123'; # 软件上和网站加密串设置保存一致
        $check_sign = md5($tno . $order_sn . $real_money . $MD5_str); # MD5(tno+payno+money+md5加密串)
        # 常见接口
        # http://你的域名/index.php/Server/jfb_pay?name=#name&money=#money&tradeNo=#tno&sign=#sign&key=软件识别密钥 成功返回值1
        # http://你的域名/index.php/Lerver/lxcz_pay?name=#name&money=#money&ddh=#tno&sign=#sign&key=软件识别密钥 成功返回值1
        # http://你的域名/index.php/Server/jfb_pay?name=#name&money=#money&ddh=#tno&sign=#sign&key=软件识别密钥  成功返回值ok
        # http://你的域名/pay/post.php|POST|name=#name&ddh=#tno&money=#money&sign=#sign&key=软件KEY  成功返回值okokokokokok或ok
        $info = [
            'order_sn'   => $order_sn,
            'tno'        => $tno,
            'real_money' => $real_money,
            'sign'       => $sign,
            'key'        => $key,
            'typ'        => $typ,
            'isSg'       => $isSg,
            'isQr'       => $isQr,
            'time'       => date('Y/m/d H:i:s'),
        ];
        # 判断
        if ($check_sign == $sign) {
            $order_info = Db::table('nt_order')->where('order_sn', $order_sn)->find();
            if (empty($order_info)) {
                $info['bz'] = '订单不存在';
                $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
                Db::table('nt_test')->insert(['text' => $log]);
                echo '0';
                exit();
            }
            if ($order_info['is_pay'] == 1) {
                $info['bz'] = '已经支付';
                $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
                Db::table('nt_test')->insert(['text' => $log]);
                echo '0';
                exit();
            }
            if ($real_money != $order_info['price']) {
                $info['bz'] = '订单金额不对';
                $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
                Db::table('nt_test')->insert(['text' => $log]);
                echo '0';
                exit();
            }
            $data = [
                'is_pay'   => 1,
                'pay_time' => date('Y/m/d H:i:s'),
            ];
            $is_updata = Db::table('nt_order')->where('order_sn', $order_sn)->update($data);
            if ($is_updata) {
                # 用户处理
                Db::table('nt_users')->where('id', $order_info['uid'])->setInc('money_total', $order_info['money']);
                $book = new \app\index\controller\Book();
                $book->money_log($order_info['uid'], $order_info['money'], 1);
                echo '1';
                exit();
            } else {
                $info['bz'] = '更新失败';
                $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
                Db::table('nt_test')->insert(['text' => $log]);
                echo '0';
                exit();
            }
        } else {
            $info['bz'] = '验证签名失败';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            echo '0';
            exit();
        }
    }
}


多收款码处理,无需备注和输入金额

<?php
namespace app\index\controller;

use think\Controller;
use think\Db;

/**
# 软件上:支付宝[账号1] 收款码:任意金额 填写金额:999999 二维码说明是收款 然后二维码上传
# 软件上:依次上传自己的 固定金额收款码 选中上传(网站上:扫码应用->二维码图片数据 看得到)
# 网站上:绑定支付域名 自己的域名解析到 服务商的:xgpay1.mcbpay.com
# 网站上:扫码应用->二维码图片数据->把二维码上线 所在金额上线
# 其他
# 二维码创建上传方法
# 1、登录软件 二维码设置 设置APPID  (APPID APPKEY 到网站上 扫码应用里面找)
# 2、软件上 二维码设置 下面金额组里面输入常用金额 如100,500,1000,2000,999999 点批量新增
#    多个金额逗号隔开 其中999999是任意金额
# 3、创建后 双击记录 选择对应金额的二维码图片上传 其中999999使用不设置金额的二维码上传
# 4、网站上 扫码应用 二维码图片数据 把已经上传的二维码设置上线#
#
# 二维码图片更换方法
# 1、软件上 二维码设置 清空本地二维码数据
# 2、网站上 扫码应用 二维码图片数据 删除二维码图片
# 3、软件上 二维码设置 重新创建上传二维码
# 4、网站上 扫码应用 二维码图片数据 上线二维码
# 5、软件上 登录新的支付宝,微信的重新获取缓存码
 */
<?php
return [
    'appid'  => '666',
    'appkey' => '666',
    'payurl' => 'www.666.net',
];
class Saomapay extends Controller
{
    /**
     * 收款码支付 异步回调
     * @return [type] [description]
     */
    public function apipay()
    {
        // 测试
        // $log        = json_encode($_REQUEST, JSON_UNESCAPED_UNICODE);
        // Db::table('nt_test')->insert(['text' => $log]);
        //软件接口配置
        $key_   = "666"; //接口KEY  自己修改下 软件上和这个设置一样就行
        $md5key = "666"; //MD5加密字符串 自己修改下 软件上和这个设置一样就行
        # 这里填写:http://feibao.luhong421.com/index/Saomapay/apipay?name=#name&tno=#tno&money=#money&sign=#sign&key=123456789
        //软件接口地址 http://域名/mcbpay/apipay.php?payno=#name&tno=#tno&money=#money&sign=#sign&key=接口KEY
        $getkey = input('key'); //接收参数key
        $tno    = input('tno'); //接收参数tno 交易号
        $payno  = input('name'); //接收参数payno 一般是用户名 用户ID 单号
        $money  = input('money'); //接收参数money 付款金额
        $sign   = input('sign'); //接收参数sign
        $typ    = (int) input('typ'); //接收参数typ
        $info   = [
            'order_sn'   => $payno,
            'tno'        => $tno,
            'real_money' => $money,
            'sign'       => $sign,
            'typ'        => $typ,
            'time'       => date('Y/m/d H:i:s'),
        ];
        if ($typ == 1) {
            $typname = '手工充值';
        } else if ($typ == 2) {
            $typname = '支付宝充值';
        } else if ($typ == 3) {
            $typname = '财付通充值';
        } else if ($typ == 4) {
            $typname = '手Q充值';
        } else if ($typ == 5) {
            $typname = '微信充值';
        }
        if (!$tno) {
            $info['bz'] = '没有订单号';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('没有订单号');
        }
        if (!$payno) {
            $info['bz'] = '没有付款说明';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('没有付款说明');
        }
        if ($getkey != $key_) {
            $info['bz'] = 'KEY错误';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('KEY错误');
        }
        if (strtoupper($sign) != strtoupper(md5($tno . $payno . $money . $md5key))) {
            $info['bz'] = '签名错误';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('签名错误');
        }
        //************以下代码自己写
        //查询数据库 交易号tno是否存在  tno数据库充值表增加个字段 长度50 存放交易号
        //已经存在输出 存在  交易号唯一
        //不存在 查询用户是否存在
        //用户存在 增加用户充值记录 写入交易号
        //给用户增加金额
        //处理成功 输出1
        # 用户处理
        $order_info = Db::table('nt_order')->where('order_sn', $payno)->find();
        if (empty($order_info)) {
            $info['bz'] = '订单不存在';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('订单不存在');
        }
        if ($order_info['is_pay'] == 1) {
            $info['bz'] = '已经付款';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('已经付款');
        }
        $data = [
            'is_pay'   => 1,
            'pay_time' => date('Y/m/d H:i:s'),
        ];
        $is_updata = Db::table('nt_order')->where('order_sn', $payno)->update($data);
        Db::table('nt_users')->where('id', $order_info['uid'])->setInc('money_total', $order_info['money']);
        $book = new \app\index\controller\Book();
        $book->money_log($order_info['uid'], $order_info['money'], 1);
        exit('1');
    }
    /**
     * 扫码应用支付 同步回调
     * 最好填写到 网站里面 不要使用get_code()里面的back_url
     * @return [type] [description]
     */
    public function back_url()
    {
        //支付成功跳转页面
        //************************
        $myappid = config('miaochong.appid'); //您的APPID
        $appkey  = config('miaochong.appkey'); //您的APPKEY
        //***********************
        if (!isset($_REQUEST['appid']) || !isset($_REQUEST['tno']) || !isset($_REQUEST['payno']) || !isset($_REQUEST['money']) || !isset($_REQUEST['typ']) || !isset($_REQUEST['paytime']) || !isset($_REQUEST['sign'])) {
            $info['bz'] = '参数错误';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('参数错误');
        }
        $appid   = (int) $_REQUEST['appid'];
        $tno     = $_REQUEST['tno']; //交易号 支付宝 微信 财付通 的交易号
        $payno   = $_REQUEST['payno']; //网站充值的用户名 备注
        $money   = $_REQUEST['money']; //付款金额
        $typ     = (int) $_REQUEST['typ'];
        $paytime = $_REQUEST['paytime'];
        $sign    = $_REQUEST['sign'];
        $info    = [
            'order_sn'   => $payno,
            'tno'        => $tno,
            'real_money' => $money,
            'sign'       => $sign,
            'typ'        => $typ,
            'time'       => date('Y/m/d H:i:s'),
        ];
        if (!$appid || !$tno || !$payno || !$money || !$typ || !$paytime || !$sign) {
            $info['bz'] = '参数错误';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('参数错误');
        }
        if ($myappid != $appid) {
            $info['bz'] = 'appid error';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('appid error');
        }
        //sign 校验
        if ($sign != md5($appid . "|" . $appkey . "|" . $tno . "|" . $payno . "|" . $money . "|" . $paytime . "|" . $typ)) {
            $info['bz'] = '签名错误';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('签名错误');
        }
        //处理用户充值
        if ($typ == 1) {
            $typname = '手工充值';
        } else if ($typ == 2) {
            $typname = '支付宝充值';
        } else if ($typ == 3) {
            $typname = '财付通充值';
        } else if ($typ == 4) {
            $typname = '手Q充值';
        } else if ($typ == 5) {
            $typname = '微信充值';
        }
        if (!$tno) {
            $info['bz'] = '没有订单号';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('没有订单号');
        }
        if (!$payno) {
            $info['bz'] = '没有付款说明';
            $log        = json_encode($info, JSON_UNESCAPED_UNICODE);
            Db::table('nt_test')->insert(['text' => $log]);
            exit('没有付款说明');
        }
        //************以下代码自己写
        //查询数据库 交易号tno是否存在  tno数据库充值表增加个字段 长度50 存放交易号
        //已经存在输出 存在 跳转到充值记录或其他页面 交易号唯一
        //不存在 查询用户是否存在
        //用户存在 增加用户充值记录 写入交易号
        //给用户增加金额
        //处理成功
        $this->success('支付结果请等待查看!');
    }
    /**
     * 给用户扫描的地址,二维码图片
     * 采用直接跳转:(方法四)
     * 支付域名是软件提供商提供的 name解析到xgpay1.mcbpay.com
     * 跳转地址(给用户扫描的地址):http://支付域名/pay/pay.php?appid=您的APPID&payno=网站付款说明&typ=支付方式&money=支付金额&back_url=成功返回地址
     * 参数:appid=扫码应用的APPID
     * 参数:payno=网站用户付款说明 一般是用户名或者用户ID 订单号等 付款后返回给软件
     * 参数:typ=支付方式 1=支付宝转账备注 2=支付宝扫码 3=财付通 4=手机QQ支付 5=微信支付
     * 参数:money=付款金额
     * 参数:pt=pc 强制显示PC端页面 pt=wap 强制显示手机页面
     * 参数:back_url=成功返回地址 http://域名/页面 需要进行URL编码 php:urlencode() asp:Server.URLEncode() js:encodeURIComponent() 不设置这个参数时调用扫描应用里面的成功返回地址
     * @return [type] [description]
     */
    public function get_code($order_sn)
    {
        if (empty($order_sn)) {
            $this->error('订单不存在');
        }
        $order_info = Db::table('nt_order')->where('order_sn', $order_sn)->find();
        if (empty($order_info)) {
            $this->error('订单不存在');
        }
        $qrcode   = new Qrcode();
        $order_sn = $order_info['order_sn'];
        $money    = $order_info['price'];
        // $back_url = urlencode("http://feibao.luhong421.com/index/saomapay/back_url"); // 可能会被服务器屏蔽,所以进 网站 配置
        $appid = config('miaochong.appid');
        # typ=支付方式 1=支付宝转账备注 2=支付宝扫码 3=财付通 4=手机QQ支付 5=微信支付
        $shop = new Shop();
        if ($shop->is_weixin()) {
            $typ = 5;
        } else {
            $typ = 2;
        }
        $payurl = config('miaochong.payurl');
        $text   = "http://{$payurl}:9999/pay/pay.php?appid={$appid}&payno={$order_sn}&typ={$typ}&money={$money}";
        $qrcode->make_arcode($text, 0, 0);
    }
    /**
     * 直接进行跳转支付
     * @return [type] [description]
     */
    public function redirect_codeurl($roder_id, $pay_type)
    {
        $order_id   = input('order_id');
        $pay_type   = input('pay_type');
        $order_info = Db::table('nt_order')->where('id', $order_id)->find();
        if (empty($order_info)) {
            $this->error('订单不存在');
        }
        $payurl   = config('miaochong.payurl');
        $appid    = config('miaochong.appid');
        $order_sn = $order_info['order_sn'];
        $money    = $order_info['price'];
        if ($pay_type == 1) {
            $typ = 5; // 微信
        } else {
            $typ = 2;
        }
        $url = "http://{$payurl}:9999/pay/pay.php?appid={$appid}&payno={$order_sn}&money={$money}&typ={$typ}";
        $this->redirect($url);
    }
}

猜你喜欢

转载自blog.csdn.net/HD2killers/article/details/83821340
今日推荐