diff --git a/app/Http/Controllers/SkyxuController.php b/app/Http/Controllers/SkyxuController.php index 7ddca6e..61452e3 100644 --- a/app/Http/Controllers/SkyxuController.php +++ b/app/Http/Controllers/SkyxuController.php @@ -2,330 +2,72 @@ namespace App\Http\Controllers; -use App\Models\Coupon; -use App\Models\TestLog; -use App\Models\User; -use Illuminate\Queue\Jobs\Job; -use XuanChen\Coupon\Action\pingan\Query; -use XuanChen\Coupon\Action\ysd\YsdQuery; +use Illuminate\Http\Request; +use League\Flysystem\Sftp\SftpAdapter; +use League\Flysystem\Filesystem; +use XuanChen\UnionPay\Check; -class SkyxuController +class SkyxuController extends Controller { - public $user; - - public $jiemi; - - public $query_coupon; - - public $ticket; - - public $type; - - public function index() + /** + * Notes: 链接sftp + * @Author: 玄尘 + * @Date : 2021/1/26 8:18 + */ + public function sftp() { - $list = Job::get(); - dd($list); - Coupon::whereBetween('id', ['70091', '70513']) - ->orderBy('created_at', 'ASC') - ->chunk(100, function ($logs) { - foreach ($logs as $log) { - if (preg_match('/^YSD/', $log->redemptionCode, $matches)) { - $type = Coupon::TYPE_YSD; - } else { - $type = Coupon::TYPE_PINGAN; - } + $app = app('xuanchen.unionpay.check'); + $app->date = '20190722'; + $app->login(); + $app->hasFile(); + $app->start(); + dump($app->msg); - $log->type = $type; - $log->save(); - } - }); + die(); + $path = '/home/wwwroot/pingan/upload/'; + $name = 'JYMX66007320190722.txt'; + $adapter = new SftpAdapter([ + 'host' => '123.57.16.212', + 'port' => 22, + 'username' => 'root', + 'password' => 'Anetadmin1', + 'privateKey' => '', + 'passphrase' => '', + 'root' => $path, + 'timeout' => 10, + 'directoryPerm' => 0755, + ]); - dd(); - $count = TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26']) - ->where('type', 'freezecoupon') - ->where('back', '0') - ->orderBy('created_at', 'ASC') - ->count(); - dump($count); - // $list = TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26']) - // ->where('type', 'freezecoupon') - // ->where('back', '0') - // ->orderBy('created_at', 'ASC') - // ->get(); - // - //// $data = []; - //// foreach ($list as $cou) { - //// $data[] = $cou->in_source['jiemi']['redemptionCode']; - //// } - //// dump($data); + $filesystem = new Filesystem($adapter); + $lists = $filesystem->listContents(); - if ($count > 1) { - try { - TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26']) - ->where('type', 'freezecoupon') - ->where('back', '0') - ->orderBy('created_at', 'ASC') - ->chunk(100, function ($logs) { - $su = $er = []; + $content = $filesystem->read($name); - foreach ($logs as $log) { + $content = str_replace("\n", "br", $content); + dump($content); - $this->jiemi = $log->in_source['jiemi']; - $this->user = User::where('outlet_id', $this->jiemi['outletId'])->first(); - $this->getQuery(); + $content = explode("br", $content); - if (is_string($this->queryData)) { - $er[$this->jiemi['redemptionCode']] = $this->queryData; - continue; - } - - if ($this->jiemi['redemptionCode'] == '157922465040') { - dump($this->jiemi); - dump($this->ticket); - dump($this->queryData); - } - - $this->checkCode(); - if (is_string($this->ticket)) { - $er[$this->jiemi['redemptionCode']] = $this->ticket; - - $er[] = $this->jiemi['redemptionCode']; - - continue; - } - - $status = isset($log->out_source['code']) ? 2 : 3; - $exists = Coupon::where('status', $status) - ->where('redemptionCode', $this->jiemi['redemptionCode'])->exists(); - if ($exists && $status != 3) { - $er[$this->jiemi['redemptionCode']] = [ - $log->out_source, - ]; - - continue; - } - - $couponData = [ - 'user_id' => $this->user->parent->id, - 'type' => Coupon::TYPE_YSD, - 'outletId' => $this->user->outlet_id, - 'orderid' => '', - 'PaOutletId' => $this->queryData['PaOutletId'], - 'redemptionCode' => $this->jiemi['redemptionCode'], - 'thirdPartyGoodsId' => $this->queryData['thirdPartyGoodsId'], - 'couponName' => $this->queryData['couponName'], - 'price' => $this->ticket['price'], - 'total' => $this->jiemi['total'], - 'profit' => $this->ticket['profit'], - 'status' => $status, - 'remark' => isset($log->out_source['code']) ? '核销成功!' : $log->out_source[0], - 'startTime' => $this->queryData['startTime'], - 'endTime' => $this->queryData['endTime'], - 'created_at' => $log->created_at->format('Y-m-d H:i:s'), - ]; - - // dump($this->jiemi); - // dump($this->ticket); - // dump($couponData); - // dd($this->queryData); - - $coupon = Coupon::create($couponData); - $coupon->profit(); - - $log->back = 1; - $log->save(); - - } - - if (count($er) > 1) { - dump($er); - } - }); - } catch (\Exception $e) { - dd($e->getMessage()); + foreach ($content as $item) { + $array = explode('|', $item); + foreach ($array as $item) { + echo $item . "
"; } + echo '----------------------------------------' . "
"; } - + dd($content); } - public function getQuery() + public function index(Request $request) { - if (preg_match('/^YSD/', $this->jiemi['redemptionCode'], $matches)) { - $this->query_coupon = (new YsdQuery)->setOutletId($this->jiemi['outletId']) - ->setCode($this->jiemi['redemptionCode']) - ->start(); - $this->type = 'ysd'; - } else { - $this->query_coupon = (new Query)->setOutletId($this->jiemi['outletId']) - ->setCode($this->jiemi['redemptionCode']) - ->start(); - $this->type = 'pingan'; + if (method_exists($this, $request->action)) { - } - - if ($this->type == 'ysd') { - return $this->getYsdPro(); + return call_user_func_array([$this, $request->action], [$request->all()]); } else { - return $this->getPro(); + dd('未找到方法'); } - } - public function getYsdPro() - { - $rule_code = $this->query_coupon->activity->rule->code; - $code = $this->user->parent->code->where('code', $rule_code)->first(); - - if (!$code) { - $this->queryData = "核销失败,您没有权限使用此卡券优惠活动。"; - } - - $ticket = explode('-', $rule_code); - if (!is_array($ticket) || count($ticket) != 3) { - $this->queryData = "核销失败,卡券规则格式不正确"; - } - - $full = $ticket[1]; //full100 - $price = $ticket[2]; - // preg_match('/(\d{3}(\.\d+)?)/is', $full, $match); - preg_match('/\d+/', $full, $match); - - if (!is_array($match)) { - $this->queryData = "核销失败,卡券规则格式不正确。"; - } - - if (!is_numeric($this->jiemi['total'])) { - $this->queryData = "核销失败,订单金额必须是数字"; - } - - if ($match[0] > $this->jiemi['total']) { - $this->queryData = '核销失败,订单金额不足。'; - } - - $this->queryData = [ - 'couponName' => $this->query_coupon->activity->title, - 'thirdPartyGoodsId' => $rule_code, - 'productId' => '', - 'PaOutletId' => '', - 'startTime' => $this->query_coupon->start_at->format('Y-m-d H:i:s'), - 'endTime' => $this->query_coupon->end_at->format('Y-m-d H:i:s'), - ]; - - return $this->ticket = [ - 'total' => $match[0], - 'price' => $price, - 'profit' => $code->profit, - ]; - } - - public function getPro() - { - - if (is_string($this->query_coupon)) { - return $this->query_coupon; - } - - $profitOfferItemVersion = $this->query_coupon['profitOfferItemVersion']; - - $productItemList = $this->query_coupon['productItemList']; - - if (!is_array($productItemList) || !is_array($productItemList[0])) { - $this->queryData = '核销失败,平安券数据有误,可能是未配置网点。'; - } - - //循环查找 - $first = ''; - foreach ($productItemList as $key => $item) { - $productId = $item['productId']; - $thirdPartyGoodsId = $item['thirdPartyGoodsId']; - $outletList = $item['outletList']; - if (!is_array($outletList) || !is_array($outletList[0])) { - $this->queryData = '核销失败,网点信息有误!请检查平安券配置信息。'; - break; - } - - $outletList = collect($outletList); - //判断是新版还是旧版 - if ($profitOfferItemVersion) { - //新版通过第三方查询 - $first = $outletList->firstWhere('thirdOutletNo', $this->user->outlet_id); - - if ($first) { - break; - } - } else { - //旧版通过平安网点查询 - $first = $outletList->firstWhere('outletNo', $this->user->PaOutletId); - if ($first) { - break; - } - } - } - - if (!$first) { - $this->queryData = '核销失败,未找到可用网点信息。'; - } - - if (!$thirdPartyGoodsId) { - $this->queryData = '核销失败,平安券编号规则有误。'; - } - - if (!$productId) { - $this->queryData = '核销失败,未查询到平安券商品id。'; - } - - return $this->queryData = [ - 'couponName' => $this->query_coupon['couponName'], - 'thirdPartyGoodsId' => $thirdPartyGoodsId, - 'productId' => $productId, - 'PaOutletId' => $first['outletNo'], - 'startTime' => $this->query_coupon['startTime'], - 'endTime' => $this->query_coupon['endTime'], - ]; - - } - - public function checkCode() - { - if ($this->type == 'ysd') { - return $this->ticket; - } - - $code = $this->user->parent->code->where('code', $this->queryData['thirdPartyGoodsId'])->first(); - if (!$code) { - $this->ticket = "核销失败,未找到此项平安券规则,请联系管理人员检查渠道配置。"; - } - - $ticket = explode('-', $this->queryData['thirdPartyGoodsId']); - - if (!is_array($ticket) || count($ticket) != 3) { - $this->ticket = "核销失败,平安券规则格式不正确。"; - } - - $full = $ticket[1]; //full100 - $price = $ticket[2]; - preg_match('/\d+/', $full, $result); - - if (empty($result) || !is_array($result)) { - $this->ticket = "核销失败,平安券规则格式不正确。"; - } - - if (!is_numeric($this->jiemi['total'])) { - $this->ticket = "核销失败,订单金额必须是数字"; - } - if ($result[0] > $this->jiemi['total']) { - $this->ticket = '核销失败,订单金额不足,平安券不可使用。'; - } - - $this->ticket = [ - 'total' => $result[0], - 'price' => $price, - 'profit' => $code->profit, - ]; - - return $this->ticket; - } - -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 40914dd..2090f93 100644 --- a/composer.lock +++ b/composer.lock @@ -1735,6 +1735,10 @@ "sftp", "storage" ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.x" + }, "funding": [ { "url": "https://offset.earth/frankdejonge", @@ -1743,6 +1747,58 @@ ], "time": "2020-08-23T07:39:11+00:00" }, + { + "name": "league/flysystem-sftp", + "version": "1.0.22", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-sftp.git", + "reference": "cab59dd2277e02fe46f5f23195672a02ed49774d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/cab59dd2277e02fe46f5f23195672a02ed49774d", + "reference": "cab59dd2277e02fe46f5f23195672a02ed49774d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "league/flysystem": "~1.0", + "php": ">=5.6.0", + "phpseclib/phpseclib": "~2.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^5.7.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Sftp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Flysystem adapter for SFTP", + "support": { + "issues": "https://github.com/thephpleague/flysystem-sftp/issues", + "source": "https://github.com/thephpleague/flysystem-sftp/tree/master" + }, + "time": "2019-10-16T20:05:49+00:00" + }, { "name": "league/mime-type-detection", "version": "1.7.0", @@ -2190,6 +2246,121 @@ ], "time": "2020-07-20T17:29:33+00:00" }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.30", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/136b9ca7eebef78be14abf90d65c5e57b6bc5d36", + "reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.30" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2020-12-17T05:42:04+00:00" + }, { "name": "psr/container", "version": "1.0.0", @@ -5538,16 +5709,16 @@ }, { "name": "xuanchen/unionpay", - "version": "2.6", + "version": "2.7", "source": { "type": "git", "url": "https://github.com/xuanchen120/unionpay.git", - "reference": "a2430888e99a9dd284c95788a4275b78d81356e9" + "reference": "877342101be87fb82f92681578953733bf2f93f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/xuanchen120/unionpay/zipball/a2430888e99a9dd284c95788a4275b78d81356e9", - "reference": "a2430888e99a9dd284c95788a4275b78d81356e9", + "url": "https://api.github.com/repos/xuanchen120/unionpay/zipball/877342101be87fb82f92681578953733bf2f93f7", + "reference": "877342101be87fb82f92681578953733bf2f93f7", "shasum": "", "mirrors": [ { @@ -5558,6 +5729,7 @@ }, "require": { "laravel/framework": "*", + "league/flysystem-sftp": "^1.0 || ^2.0", "php": ">=7.1.3" }, "type": "library", @@ -5584,7 +5756,11 @@ } ], "description": "第三方银联对接", - "time": "2021-01-29T07:44:22+00:00" + "support": { + "issues": "https://github.com/xuanchen120/unionpay/issues", + "source": "https://github.com/xuanchen120/unionpay/tree/2.7" + }, + "time": "2021-01-31T06:20:57+00:00" } ], "packages-dev": [ @@ -8162,5 +8338,5 @@ "php": "^7.3|^8.0" }, "platform-dev": [], - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } diff --git a/config/pingan.php b/config/pingan.php new file mode 100644 index 0000000..d2bdb60 --- /dev/null +++ b/config/pingan.php @@ -0,0 +1,54 @@ + 'dev', + /** + * 测试环境参数 + */ + 'test' => [ + 'client_id' => 'P_YISHIDAI', + 'grant_type' => 'client_credentials', + 'client_secret' => 'zGg9e6J5', + 'userName' => '18804518018', + 'AES_CODE' => '61DA0376BEBCFE1F', + 'tokenUri' => 'https://test-api.pingan.com.cn:20443/oauth/oauth2/access_token', + 'Uri' => 'http://test-api.pingan.com.cn:20080/open/vassPartner/appsvr/property/api/new/', + ], + + /** + * 生产环境参数 + */ + 'dev' => [ + 'client_id' => 'P_YISHIDAI', + 'grant_type' => 'client_credentials', + 'client_secret' => 'F3j5J7bx', + 'userName' => '13936166646', + 'AES_CODE' => '108DD27AB83252DB', + 'tokenUri' => 'http://api.pingan.com.cn/oauth/oauth2/access_token', + 'Uri' => 'http://api.pingan.com.cn/open/vassPartner/appsvr/property/api/new/', + ], + 'profit' => [ + 'YSD-full100-10' => 0, + 'YSD-full100-25' => 15, + 'YSD-full100-50' => 40, + 'YSD-full200-100' => 80, + ], + 'coupon_status' => [ + 1 => '使用中', + 2 => '已使用', + 3 => '已过期', + 4 => '已收回', + 5 => '退兑换', + 6 => '已冻结', + 7 => '未激活', + ], + + 'froms' => [ + 'bsshop',//本时商城 + 'bslive',//本时生活 + ], + +]; diff --git a/config/unionpay.php b/config/unionpay.php new file mode 100644 index 0000000..a970293 --- /dev/null +++ b/config/unionpay.php @@ -0,0 +1,687 @@ + 'test', + //添加日志 + 'log' => true, + //对账单信息 + 'check' => [ + 'sftpadapter' => [ + 'host' => 'localhost',//地址 + 'port' => 22,//端口 + 'username' => 'root', //账号 + 'password' => 'Anetadmin1',//密码 + 'privateKey' => '', + 'passphrase' => '', + 'root' => '/home/wwwroot/pingan/upload/',//路径 + 'timeout' => 10,//超时时间 + 'directoryPerm' => 0755, + ], + 'type' => 'JYMX', + 'file_type' => 'txt', + ], + //获取微信侧的优惠券 + 'unionpay_url' => [ + 'test' => [ + 'code' => 'http://dev.spserv.yxlm.chinaums.com:25941/spapigateway/v2/markting/sp/coupon/order/get', + ], + 'dev' => [ + 'code' => 'https://mktos.chinaums.com/spapigateway/v2/markting/sp/coupon/order/get', + ], + ], + //不进行sign校验 + 'nosign' => [ + // '002025',//查询 + // '002100',//核销 + // '002101',//冲正 + // '002102',//撤销 + 'openid',//获取openid 封装数据 + 'code',//微信测获取优惠券 + ], + //分配的渠道号 + 'msg_sender' => '660134', + //打印在小票上,由活动标题、优惠金额、原始金额组合而成 + 'pos_receipt' => '本时生活,优惠生活', + //广告,用于打印在小票上 + 'pos_ad' => '', + //营销联盟广告,用于打印在小票上 + 'pos_mkt_ad' => '本时生活,优惠生活', + //银联渠道id + 'agent_id' => '299', + //银联网点id + 'outlet_id' => '2009300919918', + //用于银商与sp分润的金额(是佣金的一部分), 以分为单位 + 'serv_chg' => 0, + //佣金 + 'commission' => 0, + //证书 + 'certificate' => [ + 'dev' => [ + 'ysd' => [ + 'private' => storage_path('cert/unionpay/dev/ysd/private_rsa.pem'), + 'public' => storage_path('cert/unionpay/dev/ysd/public_rsa.pem'), + ], + 'union' => [ + 'public' => storage_path('cert/unionpay/dev/union/public_rsa.pem'), + ], + ], + + 'test' => [ + 'ysd' => [ + 'private' => storage_path('cert/unionpay/test/ysd/private_rsa.pem'), + 'public' => storage_path('cert/unionpay/test/ysd/public_rsa.pem'), + ], + 'union' => [ + 'public' => storage_path('cert/unionpay/test/union/public_rsa.pem'), + ], + ], + ], + //接口类型 + 'type' => [ + '002025' => '查询', + '002100' => '交易', + '002101' => '冲正', + '002102' => '撤销', + 'openid' => '封装openid参数', + '106040' => '领券', + '012100' => '核销通知', + 'code' => '生活请求发券', + ], + //日志类型对应 + 'log_type' => [ + '002025' => 'query', + '002100' => 'freezecoupon', + '002101' => 'reversal', + '002102' => 'annul', + 'openid' => 'openid', + '106040' => 'getcode', + '012100' => 'notify', + ], + // 签名检查数据 没有为全数据 + 'checksign' => [ + 'default' => [ + 'in' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + 'sign_type', + ], + 'out' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_sys_sn', + 'msg_time', + 'msg_ver', + 'msg_rsp_code', + 'msg_rsp_desc', + ], + ], + '106040' => [ + 'in' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + 'sign_type', + ], + 'out' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_sys_sn', + 'msg_time', + 'msg_ver', + 'msg_rsp_code', + 'msg_rsp_desc', + ], + ], + '012100' => [ + 'in' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + ], + 'out' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + 'msg_rsp_code', + 'msg_rsp_desc', + ], + ], + ], + //需要校验的数据 + 'validator' => [ + '002025' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_flg", + "msg_sender", + "msg_time", + "msg_ver", + "msg_sys_sn", + "req_serial_no", + "mkt_code", + "amount", + "avl_amt", + ], + '002100' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_flg", + "msg_sender", + "msg_time", + "msg_sys_sn", + "msg_ver", + "req_serial_no", + "orig_req_serial_no", + "sett_date", + "txn_date", + "txn_time", + "orig_amt", + "discount_amt", + ], + '002101' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_flg", + "msg_sender", + "msg_time", + "msg_sys_sn", + "msg_ver", + "req_serial_no", + "orig_req_serial_no", + ], + '002102' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_flg", + "msg_sender", + "msg_time", + "msg_sys_sn", + "msg_ver", + "req_serial_no", + "orig_req_serial_no", + ], + //封装openid参数 + 'openid' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_sender", + "callback_type", + "callback_url", + ], + //本时生活领券 + 'code' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_sender", + "issue_user_id", + "event_no", + "mobile", + ], + + //本时生活领券 + '106040' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + // 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + 'sp_chnl_no', + 'sp_order_no', + 'order_date', + 'event_no', + 'issue_user_id', + ], + //回调核销信息 校验数据项目 + '012100' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + 'mchnt_no', + 'term_no', + 'shop_no', + 'req_serial_no', + 'coupon_no', + 'coupon_type', + 'enc_card_no', + 'acq_term_sn', + 'refer_no', + 'sett_date', + 'txn_date', + 'txn_time', + 'orig_amt', + 'discount_amt', + 'pay_amt', + 'pay_mode', + 'event_no', + ], + ], + //入库基础数据 + 'regular' => [ + '002025' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + // "msg_flg", + "msg_sender", + "msg_time", + "msg_ver", + "msg_sys_sn",//自己添加的基础数据 + "req_serial_no",//自己添加的基础数据 + "mkt_code",//自己添加的基础数据 + ], + '002100' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + // "msg_flg", + "msg_sender", + "msg_time", + "msg_sys_sn", + "msg_ver", + "req_serial_no",//自己添加的基础数据 + "orig_req_serial_no",//自己添加的基础数据 + "sett_date",//自己添加的基础数据 + ], + '002101' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + // "msg_flg", + "msg_sender", + "msg_time", + "msg_sys_sn", + "msg_ver", + "req_serial_no",//自己添加的基础数据 + "orig_req_serial_no",//自己添加的基础数据 + ], + '002102' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + // "msg_flg", + "msg_sender", + "msg_time", + "msg_sys_sn", + "msg_ver", + "req_serial_no",//自己添加的基础数据 + "orig_req_serial_no",//自己添加的基础数据 + ], + //封装获取openid数据 + 'openid' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_sender", + ], + //本时生活领券 + 'code' => [ + "msg_type", + "msg_txn_code", + "msg_crrltn_id", + "msg_sender", + ], + //去联盟领券 + '106040' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + // 'msg_flg', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + ], + //回调核销信息 + '012100' => [ + 'msg_type', + 'msg_txn_code', + 'msg_crrltn_id', + 'msg_sender', + 'msg_time', + 'msg_sys_sn', + 'msg_ver', + 'req_serial_no', + 'sett_date', + ], + ], + 'fields' => [ + //聚合营销优惠查询接口 + '002025' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "报文流水号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "req_serial_no" => "查询流水号", + "shop_no" => "门店号", + "term_no" => "受理终端号", + "service_code" => "受理方式", + "voucher_no" => "受理凭证号", + "mkt_code" => "聚合营销码", + "mkt_mode" => "聚合营销类型", + "embedded_mchnt_no" => "发起渠道商户号", + "currency_code" => "货币代码", + "amount" => "消费金额", + "avl_amt" => "可优惠金额", + "term_sp_chnl_no" => "终端指定SP渠道号", + "func_code" => "功能码", + "times" => "次数", + "pay_mode" => "支付方式", + //用户附加信息 + "user_ext_info" => [ + "mobile_no" => "手机号", + "user_code" => "用户号", + "user_code_type" => "用户号类型", + "dev_id" => "设备id", + ], + "sign" => "签名域", + ], + 'out' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "报文流水号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_rsp_code" => "响应码", + "msg_rsp_desc" => "响应码描述", + "discount" => "折扣金额", + "actual_amt" => "折后应收金额", + "pos_display" => "POS显示", + "pos_receipt" => "POS小票", + "pos_ad" => "POS广告", + "pos_mkt_ad" => "Pos_营销联盟广告", + "sign" => "签名域", + ], + ], + //销账交易接口 + '002100' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "shop_no" => "门店号", + "term_no" => "终端号", + "req_serial_no" => "销券流水号", + "orig_req_serial_no" => "原查询流水号", + "enc_card_no" => "加密卡号", + "part_card_no" => "部分卡号", + "acq_term_sn" => "受理终端流水号", + "refer_no" => "检索参考号", + "sett_date" => "清算日期", + "txn_date" => "交易日期", + "txn_time" => "交易时间", + "orig_amt" => "原始金额", + "discount_amt" => "优惠的金额", + "pay_amt" => "支付金额", + "pay_mode" => "支付方式", + "order_no" => "订单号", + "trans_crrltn_no" => "交易关联流水号", + "equity_no" => "权益号", + "card_no" => "全卡号", + "sign" => "签名数据", + ], + 'out' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "msg_rsp_code" => "响应码", + "msg_rsp_desc" => "响应码描述", + "orig_amt" => "原始金额", + "discount_amt" => "折扣金额", + "pay_amt" => "支付金额", + "serv_chg" => "服务费", + "commission" => "佣金", + "ad" => "广告", + "pos_receipt" => "POS优惠", + "coupon_no" => "凭证号", + "coupon_type" => "凭证类型", + "sp_biz_code" => "SP统计码", + "charge_code" => "计费码", + "pos_event_title" => "SP活动主题", + "sp_contact" => "SP联系电话", + "sp_name" => "SP名称", + "event_no" => "活动号", + "td_code" => "二维码", + "memo" => "附言", + "mkt_sp_chnl_no" => "营销渠道号", + "point_amt" => "积分抵扣金额", + "sign" => "签名数据", + ], + ], + //销账冲正通知接口 + '002101' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "shop_no" => "门店号", + "term_no" => "终端号", + "req_serial_no" => "冲正流水号", + "orig_req_serial_no" => "原始销账流水号", + "trans_crrltn_no" => "交易关联流水号", + "sign" => "签名数据", + ], + 'out' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "msg_rsp_code" => "响应码", + "msg_rsp_desc" => "响应码描述", + "sign" => "签名数据", + ], + ], + '002102' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "shop_no" => "门店号", + "term_no" => "终端号", + "req_serial_no" => "撤销流水号", + "orig_req_serial_no" => "原始销账流水号", + "trans_crrltn_no" => "交易关联流水号", + "sign" => "签名数据", + ], + 'out' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "msg_rsp_code" => "响应码", + "msg_rsp_desc" => "响应码描述", + "ad" => "广告", + "td_code" => "二维码", + "sign" => "签名数据", + ], + ], + + 'openid' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_sender" => "报文发送方", + "callback_type" => "回调类型", + "callback_url" => "回调地址", + ], + 'out' => [ + "msg_sender" => "报文类型", + "nonce_str" => "随机码", + "timestamp" => "时间戳", + "auth_scope" => "授权类型", + "callback_type" => "回调类型", + "callback_url" => "回调地址", + "sign" => "签名数据", + ], + ], + + 'code' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_sender" => "报文发送方", + "issue_user_id" => "发券平台渠道用户id",//领取微信活动的券码送微信的openid + "event_no" => "活动号", + "mobile" => "手机号", + ], + 'out' => [ + "code" => "优惠券", + "sign" => "签名数据", + ], + ], + //去联盟领券 + '106040' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "shop_no" => "门店号", + "term_no" => "终端号", + "req_serial_no" => "撤销流水号", + "orig_req_serial_no" => "原始销账流水号", + "trans_crrltn_no" => "交易关联流水号", + 'sp_chnl_no' => "渠道方", + 'sp_order_no' => "第三方订单号", + 'order_date' => "订单日期", + 'event_no' => "活动号", + 'issue_user_id' => "发券平台渠道用户id", + ], + 'out' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "msg_rsp_code" => "响应码", + "msg_rsp_desc" => "响应码描述", + "sign" => "签名数据", + ], + ], + + //回调核销信息 + '012100' => [ + 'in' => [ + "msg_type" => "报文类型", + "msg_txn_code" => "交易代码", + "msg_crrltn_id" => "消息关联号", + "msg_flg" => "报文请求应答标志", + "msg_sender" => "报文发送方", + "msg_time" => "报文日期", + "msg_sys_sn" => "平台流水号", + "msg_ver" => "报文版本号", + "mchnt_no" => "商户号", + "term_no" => "终端号", + "shop_no" => "门店号", + "req_serial_no" => "销券流水号", + "coupon_no" => "凭证号", + "coupon_type" => "凭证类型", + "enc_card_no" => "加密卡号", + "acq_term_sn" => "受理终端流水号", + "refer_no" => "检索参考号", + "sett_date" => "清算日期", + "txn_date" => "交易日期", + "txn_time" => "交易时间", + "orig_amt" => "原始金额", + "discount_amt" => "优惠的金额", + "pay_amt" => "支付金额", + "pay_mode" => "支付方式", + "event_no" => "活动号", + "trans_crrltn_no" => "交易关联流水号", + "equity_no" => "权益号", + "order_no" => "订单号", + "point" => "使用的积分数量", + "point_amt" => "积分抵扣金额", + "point_account_no" => "积分账户号", + "mkt_uuid" => "联盟码申请流水号", + "custom_info" => "第三方自定义域", + ], + ], + + ], +]; diff --git a/config/wo.php b/config/wo.php new file mode 100644 index 0000000..e1fc2e5 --- /dev/null +++ b/config/wo.php @@ -0,0 +1,23 @@ + storage_path('cert/wo/309700710354582.cer'), + 'private' => storage_path('cert/wo/private_rsa.pem'), + 'public' => storage_path('cert/wo/public_rsa.pem'), + 'merchant_id' => '309700710354582', + 'charset' => '00-GBK', + 'version' => '1.0', + 'signType' => 'RSA', + 'channelType' => 'wbsh', + 'baseUri' => 'http://123.125.97.251:8880/mpc/wbsh', + 'ticketState' => [ + 'A' => 'ticketBuyback', + 'U' => 'ticketInvalid', + ], + 'ticketStateText' => [ + 'A' => '已领用', + 'U' => '已使用', + 'E' => '已过期', + 'H' => '已冻结', + ], +]; diff --git a/config/xuanchen_coupon.php b/config/xuanchen_coupon.php new file mode 100644 index 0000000..2a31974 --- /dev/null +++ b/config/xuanchen_coupon.php @@ -0,0 +1,27 @@ + \App\Models\Coupon::class, + 'rules' => [ + 'ysd' => [ + // 'pattern' => '/^YSD\d{12}/', + 'pattern' => '/^YSD/', + 'model' => \XuanChen\Coupon\Action\YsdAction::class, + ], + 'unionpay' => [ + // 'pattern' => '/^YSD\d{12}/', + 'pattern' => '/^66406/', + 'model' => \XuanChen\Coupon\Action\YsdAction::class, + ], + 'pingan' => [ + 'pattern' => '/^\d{12}$/', + 'model' => \XuanChen\Coupon\Action\PinganAction::class, + ], + + ], + + 'froms' => [ + 'bsshop',//本时商城 + 'bslive',//本时生活 + ], +]; diff --git a/routes/web.php b/routes/web.php index 64291ae..bd1b3ba 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,12 +1,17 @@ name('index'); -Route::get('/test', 'TestController@index')->name('test'); -Route::get('/test/grant', 'TestController@grant')->name('test.grant'); -Route::get('/test/checkcoupon', 'TestController@checkcoupon')->name('test.checkcoupon'); -Route::get('/test/query', 'TestController@query')->name('test.query'); -Route::get('/test/destroy', 'TestController@destroy')->name('test.destroy'); -Route::get('/test/getsign', 'TestController@getSign')->name('test.getsign'); +use App\Http\Controllers\CouponController; +use App\Http\Controllers\SkyxuController; +use App\Http\Controllers\TestController; +use App\Http\Controllers\IndexController; -Route::get('/skyxu', 'SkyxuController@index')->name('skyxu'); -Route::get('/coupon', 'CouponController@index')->name('coupon'); +Route::get('/', [IndexController::class, 'index'])->name('index'); +Route::get('/test', [TestController::class, 'index'])->name('test'); +Route::get('/test/grant', [TestController::class, 'grant'])->name('test.grant'); +Route::get('/test/checkcoupon', [TestController::class, 'checkcoupon'])->name('test.checkcoupon'); +Route::get('/test/query', [TestController::class, 'query'])->name('test.query'); +Route::get('/test/destroy', [TestController::class, 'destroy'])->name('test.destroy'); +Route::get('/test/getsign', [TestController::class, 'getSign'])->name('test.getsign'); + +Route::get('/skyxu', [SkyxuController::class, 'index'])->name('skyxu'); +Route::get('/coupon', [CouponController::class, 'index'])->name('coupon');