快充寶接入
阿新 • • 發佈:2018-11-19
單收款碼處理,需要輸入金額和備註
<?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); } }