单收款码处理,需要输入金额和备注
<?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);
}
}