123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use think\Db;
- use bsn\Bsn;
- use app\common\library\Sms as Smslib;
- /**
- * 支付回调
- */
- class Sandpay extends Api
- {
- protected $noNeedLogin = ['*'];
- protected $noNeedRight = ['*'];
- //protected $nofify_file = '../runtime/notify.txt';
- /*public function __construct(){
- $log_base_dir = '../paylog/';
- if (!is_dir($log_base_dir))
- {
- mkdir($log_base_dir, 0770, true);
- @chmod($log_base_dir, 0770);
- }
- $notify_file = $log_base_dir.'sandpay_notify.txt';
- if(!file_exists($notify_file)) {
- @touch($notify_file);
- @chmod($notify_file, 0770);
- }
- if(filesize($notify_file)>5242880)//大于5M自动切换
- {
- rename($notify_file, $log_base_dir.'sandpay_notify_'.date('Y_m_d_H_i_s').'.txt');
- }
- if(!file_exists($notify_file)) {
- @touch($notify_file);
- @chmod($notify_file, 0770);
- }
- }*/
- /**
- * 支付成功(插件)
- */
- public function notify()
- {
- //$input_post_data = json_encode($_POST);
- //filePut('[wallet][paySucc]充值参数 recharge money post'.$input_post_data);
- $postData = isset($_POST['data']) ? $_POST['data'] : [];
- $sign = isset($_POST['sign']) ? $_POST['sign'] : '';
- filePut('[wallet][paySucc]充值参数 recharge money data:'.$postData."\n".' sign:'.$sign);
- /*$dataArr = [
- "head"=>[
- "version"=>"1.0",
- "respTime"=>"20230913093602",
- "respCode"=>"000000",
- "respMsg"=>"成功",
- ],
- "body"=>[
- "mid"=>"6888806122762",
- "orderCode"=>"P23091309351693000123",
- "tradeNo"=>"P23091309351693000123",
- "clearDate"=>"20230913",
- "totalAmount"=>"000000000001",
- "orderStatus"=>"1",
- "payTime"=>"20230913093602",
- "settleAmount"=>"000000000001",
- "buyerPayAmount"=>"000000000001",
- "discAmount"=>"000000000000",
- "txnCompleteTime"=>"20230913093601",
- "payOrderCode"=>"20230913001224810000000000018593",
- "accLogonNo"=>"odk6K6wzq1m0sKwDD98Vv0xzYsIo",
- "accNo"=>"",
- "midFee"=>"000000000000",
- "extraFee"=>"000000000000",
- "specialFee"=>"000000000000",
- "plMidFee"=>"000000000000",
- "bankserial"=>"4200001938202309134493832643",
- "externalProductCode"=>"00002021",
- "cardNo"=>"",
- "creditFlag"=>"",
- "bid"=>"",
- "benefitAmount"=>"000000000000",
- "remittanceCode"=>"",
- "respTime"=>"20230912141303",
- "extend"=>[
- "type" => "gold",
- ]
- ],
- ];
- $data = ["extend"=>"",
- "charset"=>"UTF-8",
- "data"=>$dataArr,
- "sign"=>"hoCYCLfEmbHjoXg8KHLYU+TCwAh8HrilFUfk7x9GoXAHidKRGu+\/5CkUlC1AqY0OeD3EJKu3ckyqLFUZF4G5PbzFbV27DYNeaRNnbU8htmwCV06a9SgOumv79EJGZ78x2FmNcPL8xu8IhPoOzorLtG5uIifSbsPK4283X09ikb8wTeNFGMMEy+MioftEoOv892kFs5wbNaazJNp8IdAjRwB5wYeMJc28hfnSQfg9SsR5zpqTsMkbiQoybyVdF8msWjlXC1TD5+y33zj77If\/bOK5obSUCrdHZt7S3V5bN2HqyNtFPEK3Ipn2p\/lu3yyo9fFKC5WtgO8G20OVYCu7dQ==",
- "signType"=>"01",
- ];
- $plainText = json_encode($dataArr);*/
- //$plainText = '{"extend":"","charset":"UTF-8","data":"{\"head\":{\"version\":\"1.0\",\"respTime\":\"20230913093602\",\"respCode\":\"000000\",\"respMsg\":\"\u6210\u529f\"},\"body\":{\"mid\":\"6888806122762\",\"orderCode\":\"P23091309351693000123\",\"tradeNo\":\"P23091309351693000123\",\"clearDate\":\"20230913\",\"totalAmount\":\"000000000001\",\"orderStatus\":\"1\",\"payTime\":\"20230913093602\",\"settleAmount\":\"000000000001\",\"buyerPayAmount\":\"000000000001\",\"discAmount\":\"000000000000\",\"txnCompleteTime\":\"20230913093601\",\"payOrderCode\":\"20230913001224810000000000018593\",\"accLogonNo\":\"odk6K6wzq1m0sKwDD98Vv0xzYsIo\",\"accNo\":\"\",\"midFee\":\"000000000000\",\"extraFee\":\"000000000000\",\"specialFee\":\"000000000000\",\"plMidFee\":\"000000000000\",\"bankserial\":\"4200001938202309134493832643\",\"externalProductCode\":\"00002021\",\"cardNo\":\"\",\"creditFlag\":\"\",\"bid\":\"\",\"benefitAmount\":\"000000000000\",\"remittanceCode\":\"\",\"extend\":\"{\\\"type\\\":\\\"gold\\\"}\"}}","sign":"hoCYCLfEmbHjoXg8KHLYU+TCwAh8HrilFUfk7x9GoXAHidKRGu+\/5CkUlC1AqY0OeD3EJKu3ckyqLFUZF4G5PbzFbV27DYNeaRNnbU8htmwCV06a9SgOumv79EJGZ78x2FmNcPL8xu8IhPoOzorLtG5uIifSbsPK4283X09ikb8wTeNFGMMEy+MioftEoOv892kFs5wbNaazJNp8IdAjRwB5wYeMJc28hfnSQfg9SsR5zpqTsMkbiQoybyVdF8msWjlXC1TD5+y33zj77If\/bOK5obSUCrdHZt7S3V5bN2HqyNtFPEK3Ipn2p\/lu3yyo9fFKC5WtgO8G20OVYCu7dQ==","signType":"01"}';
- //echo '<pre>';var_dump($plainText);exit;
- //提取数据
- $plainText = $postData;
- $dataArray = json_decode($postData,true);
- $head = isset($dataArray['head']) ? $dataArray['head'] : [];
- $body = isset($dataArray['body']) ? $dataArray['body'] : [];
- $respCode = isset($head['respCode']) ? $head['respCode'] : '000001';
- $orderStatus = isset($body['orderStatus']) ? $body['orderStatus'] : '0';
- $orderCode = isset($body['orderCode']) ? $body['orderCode'] : '';
- $extend = isset($body['extend']) ? $body['extend'] : '';
- $extendType = '';
- if (!empty($extend)) {
- $extendArr = json_decode($extend,true);
- $extendType = isset($extendArr['type']) ? $extendArr['type'] : '';
- }
- //验签 1是正确
- $sandpay = new \app\common\library\Sandpay();
- /*$plainText = '{"head":{"version":"1.0","respTime":"20230913110455","respCode":"000000","respMsg":"成功"},"body":{"mid":"6888806122762","orderCode":"P23091311040769547523","tradeNo":"P23091311040769547523","clearDate":"20230913","totalAmount":"000000000001","orderStatus":"1","payTime":"20230913110455","settleAmount":"000000000001","buyerPayAmount":"000000000001","discAmount":"000000000000","txnCompleteTime":"20230913110455","payOrderCode":"20230913001241710000000000029923","accLogonNo":"odk6K6wzq1m0sKwDD98Vv0xzYsIo","accNo":"","midFee":"000000000000","extraFee":"000000000000","specialFee":"000000000000","plMidFee":"000000000000","bankserial":"4200001942202309131368220541","externalProductCode":"00002021","cardNo":"","creditFlag":"","bid":"","benefitAmount":"000000000000","remittanceCode":"","extend":"{\"type\":\"gold\"}"}}';
- $sign = 'Vs2JTo57FwdeT78Lxi7Sgj3XLw48+XxUZblSpVnAQkpgvPqai3m4rkobG8hfuUnYCU/yXxDbYU8hEEfc9rDryT5sFPmmTYjOISJnc6jNDBs6SpeDQhAvnpiiXgZ3/hDWp8ehsgPJbHv5nqlbzLsJM1+WhfW86sfJt70oMiffQ5v9G192zerJWXF3jL9dyLM0WmG2icr9qHz12ZPFyYYonUWRIVc+jcZ0R0qrHD7wAPx+JzbK9crXnTWu1lHjOwcVUrYtMcVDv84wSxl8NnofNUCSMSxVSYHh8ZvgPis7WtgwBcy9XfD30Jux/a/V5oIbN+7yzTlEBIL9pHZb31O4fg==';*/
- $encrypt_str = $sandpay->verify($plainText, $sign);
- if($encrypt_str != 1){
- filePut('[wallet][paySucc]充值入账更新余额失败 recharge money fail'.$orderCode."\n".' data:'.$postData."\n".' sign:'.$sign);
- echo 'Fail';exit;
- }
- //状态验证
- if($respCode != '000000'){
- filePut('[wallet][paySucc]验证回调状态失败 respCode'.$orderCode);
- echo 'Fail';exit;
- }
- if($orderStatus != '1'){
- filePut('[wallet][paySucc]验证回调订单状态 recharge money fail orderStatus'.$orderCode);
- echo 'Fail';exit;
- }
- //查询订单信息
- $PayResult = Db::name('pay_order');
- $where['pay_no'] = $orderCode;
- $order_info = $PayResult->where($where)->find();
- if ($order_info['status'] == 1) {
- filePut('[wallet][paySucc]充值入账更新余额失败 recharge money fail status已更新过'.$orderCode);
- echo 'respCode=000000';exit;
- }
- //构建支付订单处理结果信息
- //$_data['transaction_id'] = isset($data['body']['payOrderCode']) ? $data['body']['payOrderCode'] : ''; //因为文档说不一定有,所以不填了
- $_data['status'] = 2;
- $result = $PayResult->where($where)->setField($_data);
- if ($result || 1) {
- //你可以在此编写订单逻辑
- $payEventWhere['pay_no'] = $orderCode;
- $payEvent = Db::name('pay_event')->where($payEventWhere)->find();
- $args = isset($payEvent['args']) ? $payEvent['args'] : '';
- $args = json_decode($args,true);
- $rechargeM = new \app\common\model\Recharge();
- if ($extendType == 'gold') {
- $payRes = $rechargeM->goldpaysucc($orderCode,$args);
- $payTypeStr = '充值';
- } elseif($extendType == 'vip') {
- $payRes = $rechargeM->vippaysucc($orderCode,$args);
- $payTypeStr = 'vip';
- } else {
- $payRes = false;
- $payTypeStr = '未知支付类型';
- }
- if(!$payRes){
- filePut('[wallet][paySucc]'.$payTypeStr.'更新失败请查看问题'.$orderCode);
- exit;
- }
- filePut('[wallet][paySucc]回调成功'.$orderCode);
- echo 'respCode=000000';exit;
- }
- }
- }
|