config['out_rsa_public'], '-----') === false)
+ {
+ $res = "-----BEGIN PUBLIC KEY-----\n";
+ $res .= wordwrap($this->config['out_rsa_public'], 64, "\n", true);
+ $res .= "\n-----END PUBLIC KEY-----";
+ } else {
+ $res = $this->config['out_rsa_public'];
+ }
+ $pkeyid = openssl_pkey_get_public($res);
+ $sign = base64_decode($sign);
+ if($pkeyid)
+ {
+ $verify = openssl_verify($prestr, $sign, $pkeyid, OPENSSL_ALGO_SHA256);
+ openssl_free_key($pkeyid);
+ }
+ return (isset($verify) && $verify == 1) ? true : false;
+ }
+
+ /**
+ * [SyncRsaVerify 同步返回签名验证]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2017-09-25T13:13:39+0800
+ * @param [array] $data [返回数据]
+ * @param [boolean] $key [数据key]
+ */
+ private function SyncRsaVerify($data, $key)
+ {
+ $string = json_encode($data[$key], JSON_UNESCAPED_UNICODE);
+ return $this->OutRsaVerify($string, $data['sign']);
+ }
+}
+?>
\ No newline at end of file
diff --git a/extend/payment/Gmo3d1pay.php b/extend/payment/Gmo3d1pay.php
new file mode 100644
index 000000000..0ff7b20e7
--- /dev/null
+++ b/extend/payment/Gmo3d1pay.php
@@ -0,0 +1,455 @@
+config = $params;
+ }
+
+ /**
+ * 配置信息
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2018-09-19
+ * @desc description
+ */
+ public function Config()
+ {
+ // 基础信息
+ $base = [
+ 'name' => 'Gmo3d1', // 插件名称
+ 'version' => '1.0.0', // 插件版本
+ 'apply_version' => '不限', // 适用系统版本描述
+ 'apply_terminal'=> ['pc','h5', 'ios', 'android', 'toutiao'], // 适用终端 默认全部 ['pc', 'h5', 'ios', 'android', 'alipay', 'weixin', 'baidu', 'toutiao']
+ 'desc' => '2.0版本,适用PC+H5+APP+头条小程序,即时到帐支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 立即申请', // 插件描述(支持html)
+ 'author' => 'liuhj', // 开发者
+ 'author_url' => '', // 开发者主页
+ ];
+
+ // 配置信息
+ $element = [
+ [
+ 'element' => 'input',
+ 'type' => 'text',
+ 'default' => '',
+ 'name' => 'host_url',
+ 'placeholder' => 'host url',
+ 'title' => 'host url',
+ 'is_required' => 0,
+ 'message' => '请输入服务URL',
+ ]
+ ];
+
+ return [
+ 'base' => $base,
+ 'element' => $element,
+ ];
+ }
+
+ /**
+ * 支付入口
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2018-09-19
+ * @desc description
+ * @param [array] $params [输入参数]
+ */
+ public function Pay($params = [])
+ {
+ // 参数
+ if(empty($params))
+ {
+ return DataReturn('参数不能为空', -1);
+ }
+
+ // 配置信息
+ if(empty($this->config) || empty($this->config['host_url']) )
+ {
+ return DataReturn('支付缺少配置', -1);
+ }
+
+ // 支付方式
+ $ret = $this->PayWeb($params);
+
+ return $ret;
+ }
+
+ /**
+ * [PayWeb PC支付]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2018-09-28T00:23:04+0800
+ * @param [array] $params [输入参数]
+ */
+ private function PayWeb($params = [])
+ {
+ // 用户信息
+ $user = UserService::LoginUserInfo();
+ if(empty($user['token']))
+ {
+ $user = UserService::UserTokenUpdate($user['id'], $user);
+ }
+
+ // 取引登録
+ $entryTranUrl = $this->config['host_url'].'EntryTran.json';
+
+ $entryTranParameter = [
+ 'shopID' => 'tshop00001176',
+ 'shopPass' => 'e6csh5bt',
+ 'orderID' => $params['order_no'],
+ 'jobCd' => 'CAPTURE',
+ 'itemCode' => '0000990',
+ 'amount' => $params['total_price'].'',
+ 'tax' => '10',
+ 'tdFlag' => '1',
+ 'tdTenantName' => base64_encode(mb_convert_encoding('テストショップ', 'EUCJP', 'UTF-8')),
+ 'tds2Type' => '1'
+ ];
+ $entryTranResult = $this->HttpRequestJson($entryTranUrl,$entryTranParameter);
+
+ // エラーがある場合
+ if( array_key_exists( 'errCode', $entryTranResult ) ){
+ // エラー
+ return false;
+ }
+
+ // 決済実行
+
+ $execTranUrl = $this->config['host_url'].'ExecTran.json';
+
+ $execTranParameter = [
+ 'accessID' => $entryTranResult["accessID"],
+ 'accessPass' => $entryTranResult["accessPass"],
+ 'orderID' => $params['order_no'],
+ 'method' => '1',
+ 'payTimes' => '0',
+ 'cardNo' => '4123450131003312',
+ 'expire' => '2604',
+ 'securityCode' => '000',
+ 'token' => '',
+ 'httpAccept' => 'SampleHttpAccept',
+ 'httpUserAgent' => 'HttpUserAgent',
+ 'deviceCategory' => '0',
+ 'clientField1' => $params['total_price'].'',
+ 'clientField2' => 'SampleClientField2',
+ 'clientField3' => 'SampleClientField3',
+ 'clientFieldFlag' => '1',
+ 'tokenType' => '1'
+ // 'retUrl' => $params['call_back_url']
+ ];
+ $execTranResult = $this->HttpRequestJson($execTranUrl,$execTranParameter);
+ // エラーがある場合
+ if( array_key_exists( 'errCode', $execTranResult ) ){
+ // エラー
+ return false;
+ }
+
+ // ACS呼出必要
+ if($execTranResult["acs"]){
+ $this->PayHtml($execTranResult, $params['call_back_url'].'?token='.$user['token']);
+ }
+ }
+
+ /**
+ * 订单自动关闭的时间
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2021-03-24
+ * @desc description
+ */
+ public function OrderAutoCloseTime()
+ {
+ return intval(MyC('common_order_close_limit_time', 30, true)).'m';
+ }
+
+ /**
+ * 支付回调处理
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2018-09-19
+ * @desc description
+ * @param [array] $params [输入参数]
+ */
+ public function Respond($params = [])
+ {
+ echo 100;
+ echo '';
+ print_r($params);die;
+ // $data = empty($_POST) ? $_GET : array_merge($_GET, $_POST);
+ // ksort($data);
+
+ // 参数字符串
+ // $prestr = '';
+ // foreach($data AS $key=>$val)
+ // {
+ // if ($key != 'sign' && $key != 'sign_type' && $key != 'code')
+ // {
+ // $prestr .= "$key=$val&";
+ // }
+ // }
+ // $prestr = substr($prestr, 0, -1);
+
+ // // 签名
+ // if(!$this->OutRsaVerify($prestr, $data['sign']))
+ // {
+ // return DataReturn('签名校验失败', -1);
+ // }
+
+ // 認証後決済実行
+
+ $secureTranUrl = $this->config['host_url'].'SecureTran.json';
+
+ $secureTranParameter = [
+ 'paRes' => $params["PaRes"],
+ 'md' => $params["MD"]
+ ];
+ $data = $this->HttpRequestJson($secureTranUrl,$secureTranParameter);
+
+ // 支付状态
+ if(!empty($data['tranID']))
+ {
+ $status = false;
+ if(isset($data['approve']))
+ {
+ $status = true;
+ }
+
+ if($status)
+ {
+ return DataReturn('支付成功', 0, $this->ReturnData($data));
+ }
+ }
+ return DataReturn('处理异常错误', -100);
+ }
+
+ /**
+ * [ReturnData 返回数据统一格式]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2018-10-06T16:54:24+0800
+ * @param [array] $data [返回数据]
+ */
+ private function ReturnData($data)
+ {
+ // 返回数据固定基础参数
+ $data['trade_no'] = $data['tranID']; // 支付平台 - 订单号
+ $data['buyer_user'] = '';//$data['seller_id']; // 支付平台 - 用户
+ $data['out_trade_no'] = $data['orderID'];//$data['out_trade_no']; // 本系统发起支付的 - 订单号
+ $data['subject'] = isset($data['subject']) ? $data['subject'] : ''; // 本系统发起支付的 - 商品名称
+ $data['pay_price'] = $data['clientField1'];//$data['total_amount']; // 本系统发起支付的 - 总价
+
+ return $data;
+ }
+
+ /**
+ * 退款处理
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2019-05-28
+ * @desc description
+ * @param [array] $params [输入参数]
+ */
+ public function Refund($params = [])
+ {
+
+ }
+
+
+ /**
+ * [HttpRequest 网络请求]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2017-09-25T09:10:46+0800
+ * @param [string] $url [请求url]
+ * @param [array] $data [发送数据]
+ * @return [mixed] [请求返回数据]
+ */
+ private function HttpRequest($url, $data)
+ {
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_FAILONERROR, false);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+
+ $body_string = '';
+ if(is_array($data) && 0 < count($data))
+ {
+ foreach($data as $k => $v)
+ {
+ $body_string .= $k.'='.urlencode($v).'&';
+ }
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $body_string);
+ }
+ $headers = array('content-type: application/x-www-form-urlencoded;charset=windows-31j');
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+ $reponse = curl_exec($ch);
+ var_dump($reponse);
+ if(curl_errno($ch))
+ {
+ return false;
+ } else {
+ $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ if(200 !== $httpStatusCode)
+ {
+ return false;
+ }
+ }
+ curl_close($ch);
+ return json_decode($reponse, true);
+ }
+
+ /**
+ * 网络请求
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2017-09-25T09:10:46+0800
+ * @param [string] $url [请求url]
+ * @param [array] $data [发送数据]
+ * @param [int] $second [超时]
+ * @return [mixed] [请求返回数据]
+ */
+ private function HttpRequestJson($url, $data, $second = 30)
+ {
+ $ch = curl_init();
+ $header = ['Content-Type: application/json;charset=UTF-8'];
+
+ curl_setopt_array($ch, array(
+ CURLOPT_URL => $url,
+ CURLOPT_HTTPHEADER => $header,
+ CURLOPT_POST => true,
+ CURLOPT_SSL_VERIFYPEER => false,
+ CURLOPT_SSL_VERIFYHOST => false,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_POSTFIELDS => json_encode($data),
+ CURLOPT_TIMEOUT => $second,
+ ));
+ $result = curl_exec($ch);
+
+ //返回结果
+ if($result)
+ {
+ curl_close($ch);
+ return json_decode($result, true);
+ } else {
+ $error = curl_errno($ch);
+ curl_close($ch);
+ return "curl出错,错误码:$error";
+ }
+ }
+ /**
+ * 获取签名内容
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2019-03-15
+ * @desc description
+ * @param [array] $params [需要签名的参数]
+ */
+ public function GetSignContent($params)
+ {
+ ksort($params);
+ $string = "";
+ $i = 0;
+ foreach($params as $k => $v)
+ {
+ if(!empty($v) && "@" != substr($v, 0, 1))
+ {
+ if ($i == 0) {
+ $string .= "$k" . "=" . "$v";
+ } else {
+ $string .= "&" . "$k" . "=" . "$v";
+ }
+ $i++;
+ }
+ }
+ unset($k, $v);
+ return $string;
+ }
+
+ /**
+ * 跳转
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2019-05-25T00:07:52+0800
+ * @param [array] $pay_data [支付信息]
+ * @param [string] $redirect_url [支付结束后跳转url]
+ */
+ private function PayHtml($pay_data,$redirect_url)
+ {
+ // 支付代码
+ exit('
+
+
+
+
+
+
+
+
+ ');
+ }
+}
+?>
\ No newline at end of file
diff --git a/extend/payment/SliWeixin.php b/extend/payment/SliWeixin.php
deleted file mode 100644
index 206cb728c..000000000
--- a/extend/payment/SliWeixin.php
+++ /dev/null
@@ -1,353 +0,0 @@
-config = $params;
- }
-
- /**
- * 配置信息
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @date 2018-09-19
- * @desc description
- */
- public function Config()
- {
- // 基础信息
- $base = [
- 'name' => '星链-微信', // 插件名称
- 'version' => '1.0.0', // 插件版本
- 'apply_version' => '不限', // 适用系统版本描述
- 'apply_terminal'=> ['pc','h5'], // 适用终端 默认全部 ['pc', 'h5', 'ios', 'android', 'alipay', 'weixin', 'baidu']
- 'desc' => '适用PC+H5,即时到帐支付方式,跨境支付。 立即申请', // 插件描述(支持html)
- 'author' => 'Devil', // 开发者
- 'author_url' => 'http://shopxo.net/', // 开发者主页
- ];
-
- // 配置信息
- $element = [
- [
- 'element' => 'input',
- 'type' => 'text',
- 'default' => '',
- 'name' => 'accounts',
- 'placeholder' => '登录帐号',
- 'title' => '登录帐号',
- 'is_required' => 0,
- 'message' => '请填写登录帐号',
- ],
- [
- 'element' => 'input',
- 'type' => 'text',
- 'default' => '',
- 'name' => 'secret',
- 'placeholder' => '密钥',
- 'title' => '密钥',
- 'is_required' => 0,
- 'message' => '请填写密钥',
- ],
- [
- 'element' => 'input',
- 'type' => 'text',
- 'default' => 'CNY',
- 'name' => 'currency',
- 'placeholder' => '货币',
- 'title' => '货币',
- 'is_required' => 0,
- 'message' => '请填写货币',
- ],
- ];
-
- return [
- 'base' => $base,
- 'element' => $element,
- ];
- }
-
- /**
- * 支付入口
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @date 2018-09-19
- * @desc description
- * @param [array] $params [输入参数]
- */
- public function Pay($params = [])
- {
- // 参数
- if(empty($params))
- {
- return DataReturn('参数不能为空', -1);
- }
-
- // 配置信息
- if(empty($this->config))
- {
- return DataReturn('支付缺少配置', -1);
- }
-
- // 处理支付
- $parameter = [
- 'login' => $this->config['accounts'],
- 'orderno' => $params['order_no'],
- 'paymode' => $this->pay_type,
- 'currency' => $this->config['currency'],
- 'amount' => (int) (($params['total_price']*1000)/10),
- 'product' => $params['name'],
- 'ip' => GetClientIP(),
- 'notifyurl' => $params['notify_url'],
- 'callbackurl' => $params['redirect_url'],
- 'rejecturl' => $params['call_back_url'],
- ];
-
- // 签名
- $parameter['md5check'] = $this->GetParamSign($parameter);
-
- $url = 'https://www.sli.money/api/main/v1/payment/request';
- $ret = $this->HttpRequest($url, $parameter);
- if($ret['code'] == 0)
- {
- return DataReturn('success', 0, $ret['data']['payurl']);
- }
- return $ret;
- }
-
- /**
- * 签名生成
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @date 2018-09-19
- * @desc description
- * @param [array] $params [输入参数]
- * @param [boolean] $is_ksort [是否需要排序]
- * @param [string] $key_field [密钥字段key]
- */
- private function GetParamSign($params = [], $is_ksort = false, $key_field = 'secret')
- {
- $string = '';
- if($is_ksort)
- {
- ksort($params);
- }
- foreach($params AS $key=>$val)
- {
- if(!in_array($key, ['sign']))
- {
- $string .= $key.'='.$val.'&';
- }
- }
-
- return md5($string.$key_field.'='.$this->config['secret']);
- }
-
- /**
- * 支付回调处理
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @date 2018-09-19
- * @desc description
- * @param [array] $params [输入参数]
- */
- public function Respond($params = [])
- {
- if(empty($this->config))
- {
- return DataReturn('配置有误', -1);
- }
- if(empty($params['refno']))
- {
- return DataReturn('支付失败', -1);
- }
- if(empty($params['sign']))
- {
- return DataReturn('签名为空', -1);
- }
-
- // 签名验证
- $sign = $this->GetParamSign($params, true, 'key');
- if($sign != $params['sign'])
- {
- return DataReturn('签名错误', -1);
- }
-
- // 支付状态
- if(isset($params['errcode']))
- {
- switch($params['errcode'])
- {
- // 收款方报故障单
- case 9040 :
- $ret = DataReturn('收款平台故障', -10);
- break;
-
- // 交易取消
- case 9099 :
- $ret = DataReturn('交易取消', -20);
- break;
-
- // 成功
- case 9000 :
- case 9044 :
- case 9046 :
- $ret = DataReturn('支付成功', 0, $this->ReturnData($params));
- break;
-
- // 默认
- default :
- $ret = DataReturn('支付错误['.$params['errmsg'].']', -100);
- }
- } else {
- $ret = DataReturn('支付异常错误', -1000);
- }
- return $ret;
- }
-
- /**
- * [ReturnData 返回数据统一格式]
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @datetime 2018-10-06T16:54:24+0800
- * @param [array] $data [返回数据]
- */
- private function ReturnData($data)
- {
- // 返回数据固定基础参数
- $data['trade_no'] = isset($data['refno']) ? $data['refno'] : ''; // 支付平台 - 订单号
- $data['buyer_user'] = ''; // 支付平台 - 用户
- $data['out_trade_no'] = $data['orderno']; // 本系统发起支付的 - 订单号
- $data['subject'] = ''; // 本系统发起支付的 - 商品名称
- $data['pay_price'] = $data['amount']/100; // 本系统发起支付的 - 总价
-
- return $data;
- }
-
- /**
- * 网络请求
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @datetime 2017-09-25T09:10:46+0800
- * @param [string] $url [请求url]
- * @param [array] $data [发送数据]
- * @param [int] $second [超时]
- * @return [mixed] [请求返回数据]
- */
- private function HttpRequest($url, $data, $second = 30)
- {
- $ch = curl_init();
- $header = ['Content-Type: application/json;charset=utf-8'];
- curl_setopt_array($ch, array(
- CURLOPT_URL => $url,
- CURLOPT_HTTPHEADER => $header,
- CURLOPT_POST => true,
- CURLOPT_SSL_VERIFYPEER => false,
- CURLOPT_SSL_VERIFYHOST => false,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_POSTFIELDS => json_encode($data),
- CURLOPT_TIMEOUT => $second,
- ));
- $result = curl_exec($ch);
-
- //返回结果
- if($result)
- {
- curl_close($ch);
- $res = json_decode($result, true);
- if(empty($res) || empty($res['data']) || empty($res['data']['errcode']))
- {
- return DataReturn('请求失败['.$result.']', -1);
- }
- if($res['data']['errcode'] != 200)
- {
- return DataReturn($this->ErrorCodeToMsg($res['data']['errcode'], $res['data']['errmsg']), -1);
- }
- return DataReturn('success', 0, $res['data']);
- } else {
- $error = curl_errno($ch);
- curl_close($ch);
- return DataReturn('curl出错,错误码['.$error.']', -1);
- }
- }
-
- /**
- * 错误处理
- * @author Devil
- * @blog http://gong.gg/
- * @version 1.0.0
- * @date 2021-06-08
- * @desc description
- * @param [string] $code [错误码]
- * @param [string] $msg [错误信息]
- */
- public function ErrorCodeToMsg($code, $msg)
- {
- $data = [
- '4001' => '第三方登录信息不能为空',
- '4002' => '第三方登录信息不存在',
- '4003' => '第三方订单号信息不能为空',
- '4004' => '第三方订单号不能重复',
- '4005' => '第三方订单支付方式不能为空',
- '4006' => '第三方订单支付方式应该为1-5 ',
- '4007' => '第三方订单支付金额不能为空',
- '4008' => '第三方订单支付金额应该大于等于0 第三方订单币种汇率不能为空',
- '4010' => '第三方订单md5check不能为空',
- '4011' => '第三方订单callbackurl不能为空',
- '4012' => '第三方订单notifyurl不能为空',
- '4013' => '第三方订单rejecturl不能为空',
- '4014' => '第三方登录帐号已经关闭',
- '4015' => '没有该订单号',
- '4016' => '第三方订单号不能大於30位文字',
- '4020' => '支付金额大于流量,请先买流量',
- '4021' => '支付金额大于最大限额,请把支付金额调小',
- '4021' => '请把支付金额调小',
- '4023' => '不能用这种支付方式,请找客服确认无效IP地址',
- '4030' => '你没有当前货币的权限,请找客服确认',
- '4040' => 'md5check错误',
- '4041' => '不允许HTTPGET方法',
- '4133' => '账户余额不足',
- ];
- return (array_key_exists($code, $data) ? $data[$code] : $msg).'['.$code.']';
- }
-}
-?>
\ No newline at end of file
diff --git a/sourcecode/weixin/default/components/layout/layout.wxss b/sourcecode/weixin/default/components/layout/layout.wxss
index d547fb310..ef7cf9e31 100755
--- a/sourcecode/weixin/default/components/layout/layout.wxss
+++ b/sourcecode/weixin/default/components/layout/layout.wxss
@@ -678,7 +678,7 @@
.module-title-container .module-title-content{position:relative}
.module-title-container .title-main{font-size:16px;font-weight:600;color:#666}
.module-title-container .title-vice{color:#999;font-size:12px;margin-left:10px}
-.module-title-container .more-content{position:absolute;top:calc(50% - 8px);right:0}
+.module-title-container .more-content{position:absolute;top:calc(50% - 8px);right:0;font-size:12px;}
/**
* 模块内容基础样式