hrjy 2 years ago
parent
commit
bf9aa8d488

+ 35 - 0
app/api/controller/AlipayController.php

@@ -2,10 +2,14 @@
 
 namespace app\api\controller;
 
+use app\models\store\StoreOrder;
+use app\models\user\UserBill;
+use app\phpPay\hpay\pay\AliLife;
 use app\Request;
 use crmeb\repositories\PaymentRepositories;
 use crmeb\services\AlipayService;
 use crmeb\services\SystemConfigService;
+use crmeb\services\UtilService;
 use crmeb\utils\Hook;
 
 class AlipayController
@@ -30,4 +34,35 @@ class AlipayController
             exit();
         }
     }
+
+    public function sdNotify(Request $request)
+    {
+        $post = $request->post();
+        $data = json_decode($post['data']);
+        $sing = json_decode($post['sign']);
+//        $client = new AliLife();
+//         //验签
+//        try {
+//            $verifyFlag = $client->verify($data, $sing);
+//            if (!$verifyFlag) throw new Exception('签名失败');
+//        } catch (\Exception $e) {
+//            exit('签名失败');
+//        }
+        if ($data->body->orderStatus == 1) {
+            $order = strstr($data->body->orderCode, '-', -1);
+            if (StoreOrder::be(['order_id' => $order, 'paid' => 1])) return true;
+            $res = StoreOrder::paySuccess($order, 'sdpay');
+            if ($res){
+                echo 'respCode=000000';
+                exit();
+            }else{
+                echo 'error';
+                exit();
+            }
+        }
+        echo 'error';
+        exit();
+    }
+
+
 }

+ 111 - 0
app/api/controller/order/StoreOrderController.php

@@ -2,6 +2,11 @@
 
 namespace app\api\controller\order;
 
+use app\models\user\WechatUser;
+use app\phpPay\bank\pay\UnionSDK;
+use app\phpPay\hpay\pay\AliLife;
+use app\phpPay\wexin\pay\Common;
+use app\phpPay\wexin\pay\WechatPay;
 use app\admin\model\system\{
     SystemAttachment, ShippingTemplates
 };
@@ -266,6 +271,45 @@ class StoreOrderController
                         return app('json')->status('ali_pay', '订单创建成功', $info);
                     }
                     break;
+                case "ylpay":
+                    $pay = new AliLife();
+                    $pay->body = [
+                        'orderCode' => $order['order_id'].'-'.time(),
+                        'totalAmount' => '000000000100',
+                        'payMode'     => 'sand_upsdk',
+                        'subject' => '购买商品',
+                        'body' => '购买商品',
+                        'clientIp' => $_SERVER['REMOTE_ADDR'],
+                        'notifyUrl' => SystemConfigService::get('site_url').'sdNotify',
+                        'frontUrl' => SystemConfigService::get('site_url'),
+                    ];
+                    $res = $pay->request('orderPay');
+                    if ($res['code'] == 1){
+                        $data = json_decode($res['data']);
+                        return app('json')->status('ylpay', ['config' => json_decode($data->body->credential),'order_id' => $order['order_id']]);
+                    }else{
+                        return app('json')->fail($res['msg']);
+                    }
+                    break;
+                case "sdbank":
+                    $pay = new UnionSDK();
+                    $pay->body = [
+                        'orderCode' => $order['order_id'].'-'.time(),
+                        'totalAmount' => '000000000101',
+                        'payMode'     => 'sand_h5',
+                        'subject' => '购买商品',
+                        'body' => '购买商品',
+                        'clientIp' => $_SERVER['REMOTE_ADDR'],
+                        'notifyUrl' => SystemConfigService::get('site_url').'/api/sdNotify',
+                        'frontUrl' => SystemConfigService::get('site_url'),
+                    ];
+                    $res = $pay->request('orderPay');
+                    if ($res['code'] == 1){
+                        return app('json')->status('H5', ['html' => $res['html'],'order_id' => $order['order_id']]);
+                    }else{
+                        return app('json')->fail($res['msg']);
+                    }
+                    break;
             }
         } else return app('json')->fail(StoreOrder::getErrorInfo('订单生成失败!'));
     }
@@ -397,6 +441,73 @@ class StoreOrderController
                     return app('json')->status('ali_pay', '订单创建成功', $info);
                 }
                 break;
+
+            case "ailpay":
+                $data = [
+                    'version' => '10',
+                    'mer_no' => '6888804045113',
+                    'mer_key' => 'Ids+y1lR4thuaHGxXaCwCLbkdFXTjze96Tua3U88ZHsvaHvYxNi7HiMBOnabYUckONdHUdUR/0g=',
+                    'mer_order_no' => $order['order_id'].'-'.time(),
+                    'create_time' => date('YmdHis',time()),
+                    'expire_time' => date('YmdHis',time()+1800),
+                    'order_amt' => $order['pay_price'],
+                    'notify_url' => SystemConfigService::get('site_url').'/api/sdNotify',
+                    'return_url' => SystemConfigService::get('site_url'),
+                    'create_ip' => str_replace('.','_', $_SERVER['REMOTE_ADDR']),
+                    'goods_nam' => StoreOrder::getProductTitle($order['cart_id']),
+                    'store_id' => 000000,
+                    'product_code' => 02020004,
+                    'pay_extra' => '',
+                    'clear_cycle' => 3,
+                    'accsplit_flag' => 'NO',
+                    'jump_scheme' => 'sandcash://scpay',
+                    'sign_type' => 'MD5',
+                    'meta_option' => json_encode([
+                        ['s' => 'Android', 'n' => '', 'id' => '','sc' => ''],
+                        ['s' => 'IOS', 'n' => '', 'id' => '','sc' => ''],
+                    ])
+                ];
+                $data['sing'] = sing($data, 'FQ7AZy8uve6bp7yed0MK2HqZ+qlwE798t0L0HZm0Xv7oBE8zyyB5QcTIc2iJcGXdmcDy+d3mf/N0m2NjLxy8qsME+l5b4jCqLOcCP6oEE2mYiitZIKIfvpsHc7nNZKB3yc5tMRDMqKxixuz+UKFTiw==');
+                return app('json')->successful('ok',$data);
+            case "ylpay":
+                $pay = new AliLife();
+                $pay->body = [
+                    'orderCode' => $order['order_id'].'-'.time(),
+                    'totalAmount' => strval(substr_replace('000000000000', strval($order['pay_price']*100), '-'.strlen(strval($order['pay_price']*100)))),
+                    'payMode'     => 'sand_upsdk',
+                    'subject' => '购买商品',
+                    'body' => '购买商品',
+                    'clientIp' => $_SERVER['REMOTE_ADDR'],
+                    'notifyUrl' => SystemConfigService::get('site_url').'sdNotify',
+                    'frontUrl' => SystemConfigService::get('site_url'),
+                ];
+                $res = $pay->request('orderPay');
+                if ($res['code'] == 1){
+                    $data = json_decode($res['data']);
+                    return app('json')->status('ylpay', ['config' => json_decode($data->body->credential),'order_id' => $order['order_id']]);
+                }else{
+                    return app('json')->fail($res['msg']);
+                }
+                break;
+            case "sdbank":
+                $pay = new UnionSDK();
+                $pay->body = [
+                    'orderCode' => $order['order_id'].'-'.time(),
+                    'totalAmount' => strval(substr_replace('000000000000', strval($order['pay_price']*100), '-'.strlen(strval($order['pay_price']*100)))),
+                    'payMode'     => 'sand_h5',
+                    'subject' => '购买商品',
+                    'body' => '购买商品',
+                    'clientIp' => $_SERVER['REMOTE_ADDR'],
+                    'notifyUrl' => SystemConfigService::get('site_url').'/api/sdNotify',
+                    'frontUrl' => SystemConfigService::get('site_url'),
+                ];
+                $res = $pay->request('orderPay');
+                if ($res['code'] == 1){
+                    return app('json')->status('H5', ['html' => $res['html'],'order_id' => $order['order_id']]);
+                }else{
+                    return app('json')->fail($res['msg']);
+                }
+                break;
         }
         return app('json')->fail('支付方式错误');
     }

+ 2 - 2
app/common.php

@@ -692,8 +692,8 @@ if (!function_exists('do_request')) {
                 }
             }
             $stringToBeSigned = substr($stringToBeSigned, 0, strlen($stringToBeSigned) - 1);
-            $stringToBeSigned .= $key;
-            return md5($stringToBeSigned);
+            $stringToBeSigned .= '&key='.$key;
+            return strtoupper(md5($stringToBeSigned));
         }
     }
 

+ 1 - 1
app/models/store/StoreOrder.php

@@ -52,7 +52,7 @@ class StoreOrder extends BaseModel
 
     protected $insert = ['add_time'];
 
-    protected static $payType = ['weixin' => '微信支付', 'yue' => '余额支付', 'offline' => '线下支付'];
+    protected static $payType = ['weixin' => '微信支付', 'yue' => '余额支付', 'offline' => '线下支付', 'app' => 'app支付', 'ailpay' => '支付宝支付', 'ylpay' => '银联支付'];
 
     protected static $deliveryType = ['send' => '商家配送', 'express' => '快递配送'];
 

+ 0 - 14
app/phpPay/.idea/deployment.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="PublishConfigData" serverName="demo">
-    <serverData>
-      <paths name="demo (1)">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
-    </serverData>
-  </component>
-</project>

+ 0 - 6
app/phpPay/.idea/misc.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="JavaScriptSettings">
-    <option name="languageLevel" value="ES6" />
-  </component>
-</project>

+ 0 - 8
app/phpPay/.idea/modules.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/php.pay.iml" filepath="$PROJECT_DIR$/.idea/php.pay.iml" />
-    </modules>
-  </component>
-</project>

+ 0 - 8
app/phpPay/.idea/php.pay.iml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>

+ 0 - 4
app/phpPay/.idea/php.xml

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="PhpProjectSharedConfiguration" php_language_level="5.5.0" />
-</project>

+ 0 - 18
app/phpPay/.idea/webServers.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="WebServers">
-    <option name="servers">
-      <webServer id="5b4cd231-5ba0-4e68-80fa-4f426adba8f3" name="demo (1)" url="http://localhost/php.pay/">
-        <fileTransfer port="0" mountedRoot="D:\wamp\www\php.pay" accessType="MOUNT" />
-      </webServer>
-    </option>
-    <groups>
-      <group>
-        <name>demo</name>
-        <servers>
-          <name value="demo (1)" />
-        </servers>
-      </group>
-    </groups>
-  </component>
-</project>

+ 0 - 370
app/phpPay/.idea/workspace.xml

@@ -1,370 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="37c27695-b4ab-4809-8d91-2e0bce8dae06" name="Default Changelist" comment="" />
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="DefaultGradleProjectSettings">
-    <option name="isMigrated" value="true" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf SIDE_TABS_SIZE_LIMIT_KEY="375" />
-  </component>
-  <component name="FindInProjectRecents">
-    <findStrings>
-      <find>拼接后</find>
-      <find>operationalType</find>
-      <find>openssl_verify</find>
-      <find>response</find>
-      <find>signdata</find>
-      <find>actNm</find>
-      <find>identityName</find>
-      <find>$alipaySdkVersion</find>
-      <find>支付宝</find>
-      <find>$gatewayUrl</find>
-      <find>$rsaPrivateKeyFilePath</find>
-      <find>rsaPublicKeyFilePath</find>
-      <find>$alipayPublicKey</find>
-      <find>alipayPublicKey</find>
-      <find>post_curls</find>
-      <find>openssl_get_publickey</find>
-      <find>alipayrsaPublicKey</find>
-      <find>rsaPrivateKey</find>
-      <find>format_secret_key</find>
-      <find>reqId</find>
-      <find>getJsonParam</find>
-      <find>rsaPrivateKeyFilePath</find>
-      <find>generateSign</find>
-      <find>rsaPublicKey</find>
-      <find>sign</find>
-      <find>verify</find>
-      <find>CURLFile</find>
-      <find>ENCRYPT_XML_NODE_NAME</find>
-      <find>merchantId</find>
-      <find>http</find>
-    </findStrings>
-    <replaceStrings>
-      <replace>mno</replace>
-    </replaceStrings>
-    <dirStrings>
-      <dir>D:\wamp\www\php.pay</dir>
-    </dirStrings>
-  </component>
-  <component name="IdeDocumentHistory">
-    <option name="CHANGED_PATHS">
-      <list>
-        <option value="$PROJECT_DIR$/wappay/service/AlipayTradeService.php" />
-        <option value="$PROJECT_DIR$/aop/request/AlipayTradeWapPayRequest.php" />
-        <option value="$PROJECT_DIR$/wappay/buildermodel/AlipayTradeWapPayContentBuilder.php" />
-        <option value="$PROJECT_DIR$/aop/AopClient.php" />
-        <option value="$PROJECT_DIR$/wappay/AlipayTradeService.php" />
-        <option value="$PROJECT_DIR$/wappay/pay1.php" />
-        <option value="$PROJECT_DIR$/wappay/query.php" />
-        <option value="$PROJECT_DIR$/wappay/refund.php" />
-        <option value="$PROJECT_DIR$/wappay/refundquery.php" />
-        <option value="$PROJECT_DIR$/app/public.key" />
-        <option value="$PROJECT_DIR$/wappay/pay.php" />
-        <option value="$PROJECT_DIR$/index.php" />
-        <option value="$PROJECT_DIR$/app/private.key" />
-        <option value="$PROJECT_DIR$/wappay/AopClient.php" />
-        <option value="$PROJECT_DIR$/readme.txt" />
-        <option value="$PROJECT_DIR$/wappay/AopEncrypt.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeDemo.php" />
-        <option value="$PROJECT_DIR$/wappay/InCome.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeActiveScan.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeReverseScan.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeJsApiScan.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeRefund.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeQuery.php" />
-        <option value="$PROJECT_DIR$/wappay/TradeRefundQuery.php" />
-        <option value="$PROJECT_DIR$/wappay/UpLoadPicture.php" />
-      </list>
-    </option>
-  </component>
-  <component name="JsFlowSettings">
-    <service-enabled>true</service-enabled>
-    <exe-path />
-    <other-services-enabled>true</other-services-enabled>
-    <auto-save>true</auto-save>
-  </component>
-  <component name="PhpServers">
-    <servers />
-  </component>
-  <component name="PhpWorkspaceProjectConfiguration" interpreter_name="PHP" />
-  <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="45" />
-    <option name="width" value="1400" />
-    <option name="height" value="820" />
-  </component>
-  <component name="ProjectView">
-    <navigator proportions="" version="1">
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="Scope" />
-      <pane id="ProjectPane">
-        <subPane>
-          <expand>
-            <path>
-              <item name="phpPay" type="b2602c69:ProjectViewProjectNode" />
-              <item name="phpPay" type="462c0819:PsiDirectoryNode" />
-            </path>
-          </expand>
-          <select />
-        </subPane>
-      </pane>
-      <pane id="PackagesPane" />
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="WebServerToolWindowFactoryState" value="false" />
-    <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/wappay" />
-    <property name="node.js.detected.package.eslint" value="true" />
-    <property name="node.js.detected.package.tslint" value="true" />
-    <property name="node.js.path.for.package.eslint" value="project" />
-    <property name="node.js.path.for.package.tslint" value="project" />
-    <property name="node.js.selected.package.eslint" value="(autodetect)" />
-    <property name="node.js.selected.package.tslint" value="(autodetect)" />
-    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
-    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
-    <property name="settings.editor.selected.configurable" value="project.propDebugger" />
-  </component>
-  <component name="RecentsManager">
-    <key name="CopyFile.RECENT_KEYS">
-      <recent name="E:\code\demo\phpPay\wappay" />
-    </key>
-  </component>
-  <component name="RunDashboard">
-    <option name="ruleStates">
-      <list>
-        <RuleState>
-          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
-        </RuleState>
-        <RuleState>
-          <option name="name" value="StatusDashboardGroupingRule" />
-        </RuleState>
-      </list>
-    </option>
-  </component>
-  <component name="RunManager">
-    <configuration name="index.php" type="JavascriptDebugType" nameIsGenerated="true" uri="http://localhost:63342/php.pay/index.php" useBuiltInWebServerPort="true">
-      <method v="2" />
-    </configuration>
-  </component>
-  <component name="SvnConfiguration">
-    <configuration />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="37c27695-b4ab-4809-8d91-2e0bce8dae06" name="Default Changelist" comment="" />
-      <created>1583798157957</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1583798157957</updated>
-      <workItem from="1583798159125" duration="13819000" />
-      <workItem from="1583812241663" duration="14214000" />
-      <workItem from="1583827613300" duration="11863000" />
-      <workItem from="1583902796948" duration="6922000" />
-      <workItem from="1583919450785" duration="11663000" />
-      <workItem from="1583931237995" duration="2734000" />
-      <workItem from="1585883321143" duration="1547000" />
-      <workItem from="1585910573151" duration="1754000" />
-      <workItem from="1586007725130" duration="4982000" />
-    </task>
-    <servers />
-  </component>
-  <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="73992000" />
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
-    <layout>
-      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24021593" />
-      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
-      <window_info id="Favorites" order="2" side_tool="true" />
-      <window_info id="Image Layers" order="3" />
-      <window_info id="Designer" order="4" />
-      <window_info id="UI Designer" order="5" />
-      <window_info id="Capture Tool" order="6" />
-      <window_info anchor="bottom" id="Message" order="0" />
-      <window_info anchor="bottom" id="Find" order="1" sideWeight="0.49928367" weight="0.40053764" />
-      <window_info anchor="bottom" id="Run" order="2" />
-      <window_info anchor="bottom" id="Debug" order="3" weight="0.24865592" />
-      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
-      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
-      <window_info anchor="bottom" id="TODO" order="6" />
-      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
-      <window_info anchor="bottom" id="Version Control" order="8" />
-      <window_info anchor="bottom" id="Database Changes" order="9" />
-      <window_info anchor="bottom" id="PHP-CGI Server" order="10" />
-      <window_info anchor="bottom" id="Terminal" order="11" />
-      <window_info anchor="bottom" id="Event Log" order="12" sideWeight="0.5007163" side_tool="true" weight="0.40053764" />
-      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
-      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
-      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info anchor="right" id="Database" order="3" />
-      <window_info anchor="right" id="Palette" order="4" />
-      <window_info anchor="right" id="Theme Preview" order="5" />
-      <window_info anchor="right" id="Maven" order="6" />
-      <window_info anchor="right" id="Capture Analysis" order="7" />
-      <window_info anchor="right" id="Palette&#9;" order="8" />
-    </layout>
-  </component>
-  <component name="TypeScriptGeneratedFilesManager">
-    <option name="version" value="1" />
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/aop/request/AlipayTradeWapPayRequest.php" />
-    <entry file="file://$PROJECT_DIR$/aop/test/TestImage.php" />
-    <entry file="file://$PROJECT_DIR$/aop/request/AlipaySecurityInfoAnalysisRequest.php" />
-    <entry file="file://$PROJECT_DIR$/aop/EncryptParseItem.php" />
-    <entry file="file://$PROJECT_DIR$/aop/EncryptResponseData.php" />
-    <entry file="file://$PROJECT_DIR$/aop/AlipayMobilePublicMultiMediaExecute.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/service/AlipayTradeService.php" />
-    <entry file="file://$PROJECT_DIR$/aop/AopEncrypt.php" />
-    <entry file="file://$PROJECT_DIR$/aop/AlipayMobilePublicMultiMediaClient.php" />
-    <entry file="file://$PROJECT_DIR$/aop/SignData.php" />
-    <entry file="file://$PROJECT_DIR$/aop/AopClient.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/pay1.php" />
-    <entry file="file://$PROJECT_DIR$/AopSdk.php" />
-    <entry file="file://$PROJECT_DIR$/config.php" />
-    <entry file="file://$PROJECT_DIR$/notify_url.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/datadownioad.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/AlipayMobilePublicMultiMediaClient.php" />
-    <entry file="file://$PROJECT_DIR$/lib/alipay_notify.class.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/AlipayTradeService.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/close.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/refund.php" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_5.php" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/openssl/openssl.php" />
-    <entry file="file://$PROJECT_DIR$/app/public.key">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="95">
-          <caret line="5" column="24" lean-forward="true" selection-end-line="5" selection-end-column="24" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/query.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/refundquery.php" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/json/json.php" />
-    <entry file="file://$PROJECT_DIR$/wappay/pay.php" />
-    <entry file="file://$PROJECT_DIR$/index.html" />
-    <entry file="file://$PROJECT_DIR$/app/private.key">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="19">
-          <caret line="1" selection-start-line="1" selection-end-line="25" selection-end-column="52" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/app/private - 副本.key" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_6.php" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_9.php" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_4.php" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/curl/curl.php" />
-    <entry file="file://$PROJECT_DIR$/log.txt" />
-    <entry file="file://$PROJECT_DIR$/readme.txt" />
-    <entry file="file://$PROJECT_DIR$/index.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-322">
-          <caret line="147" column="36" lean-forward="true" selection-start-line="147" selection-start-column="36" selection-end-line="147" selection-end-column="36" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/AopEncrypt.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1475">
-          <caret line="59" column="9" lean-forward="true" selection-start-line="59" selection-start-column="9" selection-end-line="59" selection-end-column="9" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/TradeReverseScan.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="200">
-          <caret line="8" column="29" lean-forward="true" selection-start-line="8" selection-start-column="29" selection-end-line="8" selection-end-column="29" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/TradeRefund.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="427">
-          <caret line="41" column="34" lean-forward="true" selection-start-line="41" selection-start-column="34" selection-end-line="41" selection-end-column="34" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/TradeQuery.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="250">
-          <caret line="10" column="18" lean-forward="true" selection-start-line="10" selection-start-column="18" selection-end-line="10" selection-end-column="18" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/TradeRefundQuery.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="275">
-          <caret line="11" column="45" lean-forward="true" selection-start-line="11" selection-start-column="45" selection-end-line="11" selection-end-column="45" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/TradeJsApiScan.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="352">
-          <caret line="70" column="41" lean-forward="true" selection-start-line="70" selection-start-column="41" selection-end-line="70" selection-end-column="41" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/EncryptParseItem.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="300">
-          <caret line="12" column="23" lean-forward="true" selection-start-line="12" selection-start-column="23" selection-end-line="12" selection-end-column="23" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/EncryptResponseData.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="225">
-          <caret line="9" column="27" lean-forward="true" selection-start-line="9" selection-start-column="27" selection-end-line="9" selection-end-column="27" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/UpLoadPicture.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="375">
-          <caret line="15" column="74" lean-forward="true" selection-start-line="15" selection-start-column="74" selection-end-line="15" selection-end-column="74" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/InCome.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="2125">
-          <caret line="85" lean-forward="true" selection-start-line="85" selection-end-line="85" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/TradeActiveScan.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="225">
-          <caret line="9" column="14" lean-forward="true" selection-start-line="9" selection-start-column="14" selection-end-line="9" selection-end-column="14" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/AopClient.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1877">
-          <caret line="695" column="5" selection-start-line="695" selection-start-column="5" selection-end-line="695" selection-end-column="5" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wappay/SignData.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="175">
-          <caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" />
-        </state>
-      </provider>
-    </entry>
-  </component>
-</project>

+ 0 - 779
app/phpPay/AopClient.php

@@ -1,779 +0,0 @@
-<?php
-namespace app\phpPay;
-require_once 'AopEncrypt.php';
-
-class AopClient
-{
-    //返回数据格式
-    public $format = "json";
-    //api版本
-    public $apiVersion = "1.0";
-
-    // 表单提交字符集编码
-    public $postCharset = "UTF-8";
-
-    public $debugInfo = false;
-
-    private $fileCharset = "UTF-8";
-
-    private $RESPONSE_SUFFIX = "_response";
-
-    private $ERROR_RESPONSE = "error_response";
-
-    private $SIGN_NODE_NAME = "sign";
-    //加密XML节点名称
-    private $ENCRYPT_XML_NODE_NAME = "response_encrypted";
-
-    private $needEncrypt = false;
-    //签名类型
-    public $signType = "RSA";
-
-    //加密密钥和类型
-
-    public $encryptKey;
-
-    public $encryptType = "AES";
-
-
-    public function generateSign($params, $privateKey, $signType = "RSA")
-    {
-        return $this->sign($this->getSignContent($params), $privateKey, $signType);
-    }
-
-    public function rsaSign($params, $privateKey, $signType = "RSA")
-    {
-        return $this->sign($this->getSignContent($params), $privateKey, $signType);
-    }
-
-    function unicodeDecode($name)
-    {
-        $json = '{"str":"' . $name . '"}';
-        $arr = json_decode($json, true);
-        if (empty($arr)) return '';
-        return $arr['str'];
-    }
-
-    public function getSignContent($params)
-    {
-        ksort($params);
-        $stringToBeSigned = "";
-        foreach ($params as $k => $v) {
-            $isarray = is_array($v);
-            if ($isarray) {
-                $stringToBeSigned .= "$k" . "=" . json_encode($v, 320) . "&";
-            } else {
-                $stringToBeSigned .= "$k" . "=" . "$v" . "&";
-            }
-        }
-        unset ($k, $v);
-        $stringToBeSigned = substr($stringToBeSigned, 0, strlen($stringToBeSigned) - 1);
-        return $stringToBeSigned;
-    }
-
-
-    protected function sign($data, $rsaPrivateKey, $signType = "RSA")
-    {
-         $res = "-----BEGIN RSA PRIVATE KEY-----\n" .
-            wordwrap($rsaPrivateKey, 64, "\n", true) .
-            "\n-----END RSA PRIVATE KEY-----";
-
-        ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');
-
-        if ("RSA2" == $signType) {
-            openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256);
-        } else {
-            openssl_sign($data, $sign, $res);
-        }
-
-        $sign = base64_encode($sign);
-        return $sign;
-    }
-
-//废弃
-    protected function signold($data, $signType = "RSA")
-    {
-
-        if ($this->checkEmpty($this->rsaPrivateKeyFilePath)) {
-            $priKey = $this->rsaPrivateKey;
-            $res = "-----BEGIN RSA PRIVATE KEY-----\n" .
-                wordwrap($priKey, 64, "\n", true) .
-                "\n-----END RSA PRIVATE KEY-----";
-        } else {
-            $priKey = file_get_contents($this->rsaPrivateKeyFilePath);
-            $res = openssl_get_privatekey($priKey);
-        }
-
-        ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');
-
-        if ("RSA2" == $signType) {
-            openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256);
-        } else {
-            openssl_sign($data, $sign, $res);
-        }
-
-        if (!$this->checkEmpty($this->rsaPrivateKeyFilePath)) {
-            openssl_free_key($res);
-        }
-        $sign = base64_encode($sign);
-        return $sign;
-    }
-
-
-    public function curl($url, $postBodyString = null)
-    {
-        $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);
-
-        $encodeArray = Array();
-        $postMultipart = false;
-
-        //echo  $postBodyString;
-
-        unset ($k, $v);
-        curl_setopt($ch, CURLOPT_POST, true);
-
-        curl_setopt($ch, CURLOPT_POSTFIELDS, $postBodyString);
-        $this->writeLog("postBodyString" . $postBodyString);
-        $headers = array('content-type:application/json;charset=' . $this->postCharset);
-        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-
-        $reponse = curl_exec($ch);
-
-        //echo  "reponse".$reponse;
-        if (curl_errno($ch)) {
-
-            throw new Exception(curl_error($ch), 0);
-        } else {
-            $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
-            if (200 !== $httpStatusCode) {
-                throw new Exception($reponse, $httpStatusCode);
-            }
-        }
-
-        curl_close($ch);
-        return $reponse;
-    }
-
-    protected function getMillisecond()
-    {
-        list($s1, $s2) = explode(' ', microtime());
-        return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
-    }
-
-    //请确保项目文件有可写权限,不然打印不了日志。
-    function writeLog($text)
-    {
-        // $text=iconv("GBK", "UTF-8//IGNORE", $text);
-        //$text = characet ( $text );
-        file_put_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . "../log.txt", date("Y-m-d H:i:s") . "  " . $text . "\r\n", FILE_APPEND);
-    }
-
-    /**
-     * 转换字符集编码
-     * @param $data
-     * @param $targetCharset
-     * @return string
-     */
-    function characet($data, $targetCharset)
-    {
-
-        if (!empty($data)) {
-            $fileType = $this->fileCharset;
-            if (strcasecmp($fileType, $targetCharset) != 0) {
-                $data = mb_convert_encoding($data, $targetCharset, $fileType);
-                //				$data = iconv($fileType, $targetCharset.'//IGNORE', $data);
-            }
-        }
-
-
-        return $data;
-    }
-
-    /**
-     * 校验$value是否非空
-     *  if not set ,return true;
-     *    if is null , return true;
-     **/
-    protected function checkEmpty($value)
-    {
-        if (!isset($value))
-            return true;
-        if ($value === null)
-            return true;
-        if (trim($value) === "")
-            return true;
-
-        return false;
-    }
-
-    /** rsaCheckV1 & rsaCheckV2
-     *  验证签名
-     *  在使用本方法前,必须初始化AopClient且传入公钥参数。
-     *  公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。
-     **/
-    public function rsaCheckV1($params, $rsaPublicKeyFilePath, $signType = 'RSA')
-    {
-        $sign = $params['sign'];
-        $params['sign_type'] = null;
-        $params['sign'] = null;
-        return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath, $signType);
-    }
-
-    public function rsaCheckV2($params, $rsaPublicKeyFilePath, $signType = 'RSA')
-    {
-        $sign = $params['sign'];
-        $params['sign'] = null;
-        return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath, $signType);
-    }
-
-    function verify($paramStr, $sign,$rsaPublicKey)
-    {
-       // $pubKey = $this->$rsaPublicKey;
-        //将字符串格式公私钥转为pem格式公私钥
-        $pubKeyPem = $this->format_secret_key($rsaPublicKey, 'pub');
-        //转换为openssl密钥,必须是没有经过pkcs8转换的公钥
-        $res = openssl_get_publickey($pubKeyPem);
-        //url解码签名
-        //$signUrl = urldecode($sign);
-        //base64解码签名
-        $signBase64 = base64_decode($sign);
-        //调用openssl内置方法验签,返回bool值
-        $result = (bool)openssl_verify($paramStr, $signBase64, $res);
-        //释放资源
-        openssl_free_key($res);
-        //返回资源是否成功
-        return $result;
-    }
-
-    function format_secret_key($secret_key, $type)
-    {
-        // 64个英文字符后接换行符"\n",最后再接换行符"\n"
-        $key = (wordwrap($secret_key, 64, "\n", true)) . "\n";
-        // 添加pem格式头和尾
-        if ($type == 'pub') {
-            $pem_key = "-----BEGIN PUBLIC KEY-----\n" . $key . "-----END PUBLIC KEY-----\n";
-        } else if ($type == 'pri') {
-            $pem_key = "-----BEGIN RSA PRIVATE KEY-----\n" . $key . "-----END RSA PRIVATE KEY-----\n";
-        } else {
-            echo('公私钥类型非法');
-            exit();
-        }
-        return $pem_key;
-    }
-
-    public function checkSignAndDecrypt($params, $rsaPublicKeyPem, $rsaPrivateKeyPem, $isCheckSign, $isDecrypt)
-    {
-        $charset = $params['charset'];
-        $bizContent = $params['biz_content'];
-        if ($isCheckSign) {
-            if (!$this->rsaCheckV2($params, $rsaPublicKeyPem)) {
-                echo "<br/>checkSign failure<br/>";
-                exit;
-            }
-        }
-        if ($isDecrypt) {
-            return $this->rsaDecrypt($bizContent, $rsaPrivateKeyPem, $charset);
-        }
-
-        return $bizContent;
-    }
-
-    public function encryptAndSign($bizContent, $rsaPublicKeyPem, $rsaPrivateKeyPem, $charset, $isEncrypt, $isSign)
-    {
-        // 加密,并签名
-        if ($isEncrypt && $isSign) {
-            $encrypted = $this->rsaEncrypt($bizContent, $rsaPublicKeyPem, $charset);
-            $sign = $this->sign($bizContent);
-            $response = "<?xml version=\"1.0\" encoding=\"$charset\"?><alipay><response>$encrypted</response><encryption_type>RSA</encryption_type><sign>$sign</sign><sign_type>RSA</sign_type></alipay>";
-            return $response;
-        }
-        // 加密,不签名
-        if ($isEncrypt && (!$isSign)) {
-            $encrypted = $this->rsaEncrypt($bizContent, $rsaPublicKeyPem, $charset);
-            $response = "<?xml version=\"1.0\" encoding=\"$charset\"?><alipay><response>$encrypted</response><encryption_type>RSA</encryption_type></alipay>";
-            return $response;
-        }
-        // 不加密,但签名
-        if ((!$isEncrypt) && $isSign) {
-            $sign = $this->sign($bizContent);
-            $response = "<?xml version=\"1.0\" encoding=\"$charset\"?><alipay><response>$bizContent</response><sign>$sign</sign><sign_type>RSA</sign_type></alipay>";
-            return $response;
-        }
-        // 不加密,不签名
-        $response = "<?xml version=\"1.0\" encoding=\"$charset\"?>$bizContent";
-        return $response;
-    }
-
-    public function rsaEncrypt($data, $rsaPublicKeyPem, $charset)
-    {
-        //读取公钥文件
-        $pubKey = file_get_contents($rsaPublicKeyPem);
-        //转换为openssl格式密钥
-        $res = openssl_get_publickey($pubKey);
-        $blocks = $this->splitCN($data, 0, 30, $charset);
-        $chrtext  = null;
-        $encodes  = array();
-        foreach ($blocks as $n => $block) {
-            if (!openssl_public_encrypt($block, $chrtext , $res)) {
-                echo "<br/>" . openssl_error_string() . "<br/>";
-            }
-            $encodes[] = $chrtext ;
-        }
-        $chrtext = implode(",", $encodes);
-
-        return $chrtext;
-    }
-
-    public function rsaDecrypt($data, $rsaPrivateKeyPem, $charset)
-    {
-        //读取私钥文件
-        $priKey = file_get_contents($rsaPrivateKeyPem);
-        //转换为openssl格式密钥
-        $res = openssl_get_privatekey($priKey);
-        $decodes = explode(',', $data);
-        $strnull = "";
-        $dcyCont = "";
-        foreach ($decodes as $n => $decode) {
-            if (!openssl_private_decrypt($decode, $dcyCont, $res)) {
-                echo "<br/>" . openssl_error_string() . "<br/>";
-            }
-            $strnull .= $dcyCont;
-        }
-        return $strnull;
-    }
-
-    function splitCN($cont, $n = 0, $subnum, $charset)
-    {
-        //$len = strlen($cont) / 3;
-        $arrr = array();
-        for ($i = $n; $i < strlen($cont); $i += $subnum) {
-            $res = $this->subCNchar($cont, $i, $subnum, $charset);
-            if (!empty ($res)) {
-                $arrr[] = $res;
-            }
-        }
-
-        return $arrr;
-    }
-
-    function subCNchar($str, $start = 0, $length, $charset = "gbk")
-    {
-        if (strlen($str) <= $length) {
-            return $str;
-        }
-        $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
-        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
-        $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
-        $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
-        preg_match_all($re[$charset], $str, $match);
-        $slice = join("", array_slice($match[0], $start, $length));
-        return $slice;
-    }
-
-    function parserResponseSubCode($request, $responseContent, $respObject, $format)
-    {
-
-        if ("json" == $format) {
-
-            $apiName = $request->getApiMethodName();
-            $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX;
-            $errorNodeName = $this->ERROR_RESPONSE;
-
-            $rootIndex = strpos($responseContent, $rootNodeName);
-            $errorIndex = strpos($responseContent, $errorNodeName);
-
-            if ($rootIndex > 0) {
-                // 内部节点对象
-                $rInnerObject = $respObject->$rootNodeName;
-            } elseif ($errorIndex > 0) {
-
-                $rInnerObject = $respObject->$errorNodeName;
-            } else {
-                return null;
-            }
-
-            // 存在属性则返回对应值
-            if (isset($rInnerObject->sub_code)) {
-
-                return $rInnerObject->sub_code;
-            } else {
-
-                return null;
-            }
-
-
-        } elseif ("xml" == $format) {
-
-            // xml格式sub_code在同一层级
-            return $respObject->sub_code;
-
-        }
-
-
-    }
-
-    function parserJSONSignData($request, $responseContent, $responseJSON)
-    {
-
-        $signData = new SignData();
-
-        $signData->sign = $this->parserJSONSign($responseJSON);
-        $signData->signSourceData = $this->parserJSONSignSource($request, $responseContent);
-
-
-        return $signData;
-
-    }
-
-    function parserJSONSignSource($request, $responseContent)
-    {
-
-        $apiName = $request->getApiMethodName();
-        $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX;
-
-        $rootIndex = strpos($responseContent, $rootNodeName);
-        $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE);
-
-
-        if ($rootIndex > 0) {
-
-            return $this->parserJSONSource($responseContent, $rootNodeName, $rootIndex);
-        } else if ($errorIndex > 0) {
-
-            return $this->parserJSONSource($responseContent, $this->ERROR_RESPONSE, $errorIndex);
-        } else {
-
-            return null;
-        }
-
-
-    }
-
-    function parserJSONSource($responseContent, $nodeName, $nodeIndex)
-    {
-        $signDataStartIndex = $nodeIndex + strlen($nodeName) + 2;
-        $signIndex = strpos($responseContent, "\"" . $this->SIGN_NODE_NAME . "\"");
-        // 签名前-逗号
-        $signDataEndIndex = $signIndex - 1;
-        $indexLen = $signDataEndIndex - $signDataStartIndex;
-        if ($indexLen < 0) {
-
-            return null;
-        }
-
-        return substr($responseContent, $signDataStartIndex, $indexLen);
-
-    }
-
-    function parserJSONSign($responseJSon)
-    {
-
-        return $responseJSon->sign;
-    }
-
-    function parserXMLSignData($request, $responseContent)
-    {
-
-
-        $signData = new SignData();
-
-        $signData->sign = $this->parserXMLSign($responseContent);
-        $signData->signSourceData = $this->parserXMLSignSource($request, $responseContent);
-
-
-        return $signData;
-
-
-    }
-
-    function parserXMLSignSource($request, $responseContent)
-    {
-
-
-        $apiName = $request->getApiMethodName();
-        $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX;
-
-
-        $rootIndex = strpos($responseContent, $rootNodeName);
-        $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE);
-        //		$this->echoDebug("<br/>rootNodeName:" . $rootNodeName);
-        //		$this->echoDebug("<br/> responseContent:<xmp>" . $responseContent . "</xmp>");
-
-
-        if ($rootIndex > 0) {
-
-            return $this->parserXMLSource($responseContent, $rootNodeName, $rootIndex);
-        } else if ($errorIndex > 0) {
-
-            return $this->parserXMLSource($responseContent, $this->ERROR_RESPONSE, $errorIndex);
-        } else {
-
-            return null;
-        }
-
-
-    }
-
-    function parserXMLSource($responseContent, $nodeName, $nodeIndex)
-    {
-        $signDataStartIndex = $nodeIndex + strlen($nodeName) + 1;
-        $signIndex = strpos($responseContent, "<" . $this->SIGN_NODE_NAME . ">");
-        // 签名前-逗号
-        $signDataEndIndex = $signIndex - 1;
-        $indexLen = $signDataEndIndex - $signDataStartIndex + 1;
-
-        if ($indexLen < 0) {
-            return null;
-        }
-
-
-        return substr($responseContent, $signDataStartIndex, $indexLen);
-
-
-    }
-
-    function parserXMLSign($responseContent)
-    {
-        $signNodeName = "<" . $this->SIGN_NODE_NAME . ">";
-        $signEndNodeName = "</" . $this->SIGN_NODE_NAME . ">";
-
-        $indexOfSignNode = strpos($responseContent, $signNodeName);
-        $indexOfSignEndNode = strpos($responseContent, $signEndNodeName);
-
-
-        if ($indexOfSignNode < 0 || $indexOfSignEndNode < 0) {
-            return null;
-        }
-
-        $nodeIndex = ($indexOfSignNode + strlen($signNodeName));
-
-        $indexLen = $indexOfSignEndNode - $nodeIndex;
-
-        if ($indexLen < 0) {
-            return null;
-        }
-
-        // 签名
-        return substr($responseContent, $nodeIndex, $indexLen);
-
-    }
-
-    /**
-     * 验签
-     * @param $request
-     * @param $signData
-     * @param $resp
-     * @param $respObject
-     * @throws Exception
-     */
-    public function checkResponseSign($request, $signData, $resp, $respObject)
-    {
-
-        if (!$this->checkEmpty($this->alipayPublicKey) || !$this->checkEmpty($this->alipayrsaPublicKey)) {
-
-
-            if ($signData == null || $this->checkEmpty($signData->sign) || $this->checkEmpty($signData->signSourceData)) {
-
-                throw new Exception(" check sign Fail! The reason : signData is Empty");
-            }
-
-
-            // 获取结果sub_code
-            $responseSubCode = $this->parserResponseSubCode($request, $resp, $respObject, $this->format);
-
-
-            if (!$this->checkEmpty($responseSubCode) || ($this->checkEmpty($responseSubCode) && !$this->checkEmpty($signData->sign))) {
-
-                $checkResult = $this->verify($signData->signSourceData, $signData->sign, $this->alipayPublicKey, $this->signType);
-
-
-                if (!$checkResult) {
-
-                    if (strpos($signData->signSourceData, "\\/") > 0) {
-
-                        $signData->signSourceData = str_replace("\\/", "/", $signData->signSourceData);
-
-                        $checkResult = $this->verify($signData->signSourceData, $signData->sign, $this->alipayPublicKey, $this->signType);
-
-                        if (!$checkResult) {
-                            throw new Exception("check sign Fail! [sign=" . $signData->sign . ", signSourceData=" . $signData->signSourceData . "]");
-                        }
-
-                    } else {
-
-                        throw new Exception("check sign Fail! [sign=" . $signData->sign . ", signSourceData=" . $signData->signSourceData . "]");
-                    }
-
-                }
-            }
-
-
-        }
-    }
-
-    private function setupCharsets($request)
-    {
-        if ($this->checkEmpty($this->postCharset)) {
-            $this->postCharset = 'UTF-8';
-        }
-        $str = preg_match('/[\x80-\xff]/', $this->appId) ? $this->appId : print_r($request, true);
-        $this->fileCharset = mb_detect_encoding($str, "UTF-8, GBK") == 'UTF-8' ? 'UTF-8' : 'GBK';
-    }
-
-    // 获取加密内容
-
-    private function encryptJSONSignSource($request, $responseContent)
-    {
-
-        $parsetItem = $this->parserEncryptJSONSignSource($request, $responseContent);
-
-        $bodyIndexContent = substr($responseContent, 0, $parsetItem->startIndex);
-        $bodyEndContent = substr($responseContent, $parsetItem->endIndex, strlen($responseContent) + 1 - $parsetItem->endIndex);
-
-        $bizContent = decrypt($parsetItem->encryptContent, $this->encryptKey);
-        return $bodyIndexContent . $bizContent . $bodyEndContent;
-
-    }
-
-
-    private function parserEncryptJSONSignSource($request, $responseContent)
-    {
-
-        $apiName = $request->getApiMethodName();
-        $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX;
-
-        $rootIndex = strpos($responseContent, $rootNodeName);
-        $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE);
-
-
-        if ($rootIndex > 0) {
-
-            return $this->parserEncryptJSONItem($responseContent, $rootNodeName, $rootIndex);
-        } else if ($errorIndex > 0) {
-
-            return $this->parserEncryptJSONItem($responseContent, $this->ERROR_RESPONSE, $errorIndex);
-        } else {
-
-            return null;
-        }
-
-
-    }
-
-
-    private function parserEncryptJSONItem($responseContent, $nodeName, $nodeIndex)
-    {
-        $signDataStartIndex = $nodeIndex + strlen($nodeName) + 2;
-        $signIndex = strpos($responseContent, "\"" . $this->SIGN_NODE_NAME . "\"");
-        // 签名前-逗号
-        $signDataEndIndex = $signIndex - 1;
-
-        if ($signDataEndIndex < 0) {
-
-            $signDataEndIndex = strlen($responseContent) - 1;
-        }
-
-        $indexLen = $signDataEndIndex - $signDataStartIndex;
-
-        $encContent = substr($responseContent, $signDataStartIndex + 1, $indexLen - 2);
-
-
-        $encryptParseItem = new EncryptParseItem();
-
-        $encryptParseItem->encryptContent = $encContent;
-        $encryptParseItem->startIndex = $signDataStartIndex;
-        $encryptParseItem->endIndex = $signDataEndIndex;
-
-        return $encryptParseItem;
-
-    }
-
-    // 获取加密内容
-
-    private function encryptXMLSignSource($request, $responseContent)
-    {
-
-        $parsetItem = $this->parserEncryptXMLSignSource($request, $responseContent);
-
-        $bodyIndexContent = substr($responseContent, 0, $parsetItem->startIndex);
-        $bodyEndContent = substr($responseContent, $parsetItem->endIndex, strlen($responseContent) + 1 - $parsetItem->endIndex);
-        $bizContent = decrypt($parsetItem->encryptContent, $this->encryptKey);
-
-        return $bodyIndexContent . $bizContent . $bodyEndContent;
-
-    }
-
-    private function parserEncryptXMLSignSource($request, $responseContent)
-    {
-
-
-        $apiName = $request->getApiMethodName();
-        $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX;
-
-
-        $rootIndex = strpos($responseContent, $rootNodeName);
-        $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE);
-        //		$this->echoDebug("<br/>rootNodeName:" . $rootNodeName);
-        //		$this->echoDebug("<br/> responseContent:<xmp>" . $responseContent . "</xmp>");
-
-
-        if ($rootIndex > 0) {
-
-            return $this->parserEncryptXMLItem($responseContent, $rootNodeName, $rootIndex);
-        } else if ($errorIndex > 0) {
-
-            return $this->parserEncryptXMLItem($responseContent, $this->ERROR_RESPONSE, $errorIndex);
-        } else {
-
-            return null;
-        }
-
-
-    }
-
-    private function parserEncryptXMLItem($responseContent, $nodeName, $nodeIndex)
-    {
-
-        $signDataStartIndex = $nodeIndex + strlen($nodeName) + 1;
-
-        $xmlStartNode = "<" . $this->ENCRYPT_XML_NODE_NAME . ">";
-        $xmlEndNode = "</" . $this->ENCRYPT_XML_NODE_NAME . ">";
-
-        $indexOfXmlNode = strpos($responseContent, $xmlEndNode);
-        if ($indexOfXmlNode < 0) {
-
-            $item = new EncryptParseItem();
-            $item->encryptContent = null;
-            $item->startIndex = 0;
-            $item->endIndex = 0;
-            return $item;
-        }
-
-        $startIndex = $signDataStartIndex + strlen($xmlStartNode);
-        $bizContentLen = $indexOfXmlNode - $startIndex;
-        $bizContent = substr($responseContent, $startIndex, $bizContentLen);
-
-        $encryptParseItem = new EncryptParseItem();
-        $encryptParseItem->encryptContent = $bizContent;
-        $encryptParseItem->startIndex = $signDataStartIndex;
-        $encryptParseItem->endIndex = $indexOfXmlNode + strlen($xmlEndNode);
-
-        return $encryptParseItem;
-
-    }
-
-
-    function echoDebug($content)
-    {
-
-        if ($this->debugInfo) {
-            echo "<br/>" . $content;
-        }
-
-    }
-
-
-}

+ 0 - 71
app/phpPay/AopEncrypt.php

@@ -1,71 +0,0 @@
- <?php
-/**
- *   加密工具类
- *
- * User: jiehua
- * Date: 16/3/30
- * Time: 下午3:25
- */
-
-/**
- * 加密方法
- * @param string $str
- * @return string
- */
- function encrypt($str,$screct_key){
-	//AES, 128 模式加密数据 CBC
-	$screct_key = base64_decode($screct_key);
-	$str = trim($str);
-	$str = addPKCS7Padding($str);
-	$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);
-	$encrypt_str =  mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);
-	return base64_encode($encrypt_str);
-}
-
-/**
- * 解密方法
- * @param string $str
- * @return string
- */
- function decrypt($str,$screct_key){
-	//AES, 128 模式加密数据 CBC
-	$str = base64_decode($str);
-	$screct_key = base64_decode($screct_key);
-	$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);
-	$encrypt_str =  mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);
-	$encrypt_str = trim($encrypt_str);
-
-	$encrypt_str = stripPKSC7Padding($encrypt_str);
-	return $encrypt_str;
-
-}
-
-/**
- * 填充算法
- * @param string $source
- * @return string
- */
-function addPKCS7Padding($source){
-	$source = trim($source);
-	$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
-
-	$pad = $block - (strlen($source) % $block);
-	if ($pad <= $block) {
-		$char = chr($pad);
-		$source .= str_repeat($char, $pad);
-	}
-	return $source;
-}
-/**
- * 移去填充算法
- * @param string $source
- * @return string
- */
-function stripPKSC7Padding($source){
-	$source = trim($source);
-	$char = substr($source, -1);
-	$num = ord($char);
-	if($num==62)return $source;
-	$source = substr($source,0,-$num);
-	return $source;
-}

+ 0 - 19
app/phpPay/EncryptParseItem.php

@@ -1,19 +0,0 @@
-<?php
-/**
- *  TODO 补充说明 
- *
- * User: jiehua
- * Date: 16/3/30
- * Time: 下午8:55
- */
-
-class EncryptParseItem {
-
-
-	public $startIndex;
-
-	public $endIndex;
-
-	public $encryptContent;
-
-} 

+ 0 - 18
app/phpPay/EncryptResponseData.php

@@ -1,18 +0,0 @@
-<?php
-/**
- *  TODO 补充说明 
- *
- * User: jiehua
- * Date: 16/3/30
- * Time: 下午8:51
- */
-
-class EncryptResponseData {
-
-
-	public $realContent;
-
-	public $returnContent;
-
-
-} 

+ 0 - 218
app/phpPay/InCome.php

@@ -1,218 +0,0 @@
-<?php
-
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICWwIBAAKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZ
-ZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCe
-B0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB
-AoGABKpLt+wOUf3rBeX81QADVeTgsNgUwRq+/truF7NasGlbIw+sH/CWZtMl9y5d
-dk9/jchCxNUpMrR4BKQebxNHYaltARH7fmdEVhEccrMwG1tsv5ZNt6zdEzHn5sWx
-lGEdgiRdceXBr9ApfrPEbSf9znKTZomaMrLUb1oTG8kgpQECQQDd3sHcyuYv0/5F
-1xJjZKbUDtACNHjXY/b9LNjViA4+6u8hPDiu1OHD7/hO6r86tyKyQE8ERSVM2eMb
-KgLy40zlAkEApIqPpoaGPqf1ZjXmLxjDc/UZzHr0KZYSobTI/bDyP3H4NBBIXaJL
-bKBtRn55+rvnUalZfwxmtC7hxAZjgzvRXwJACCAAOXW0uEurJCOcKMem1F02gN4r
-Drg6c0sRJcC1xNgVqcHq0Xw6SFKhZUJzflL2klCIlD9z/jx8dKI1OW/ZgQJAWfJt
-CMltRX8nhVJdnM1au173VXK5WqpxUPi1DwnVw50X484q4RTBSoaAdhLZt5lUoK2F
-ARDUbBdcz332lFz03QJAbMtVN2FC3NZW4CGaGuTfp5+tCGxLi5HFttgzPhhkvgXo
-wkeHBhf+DT8OslSxIpBhsb2l+o4Pv4wKBdBg5WJlRw==";
-		//随行付公钥
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB";
-
-
-    $array = array( //普通数组
-        "reqId" => "c3ba4932950a42618bc17a85bd2ec846",
-        "orgId" => "26680846",
-        "mecDisNm" => "签购单的的名称", //商户简称
-        "mblNo" => "185xxxxxx54",//商户联系电话
-        "operationalType" => "01",//经营类型(01线下 02线上 03非盈利类 04缴费类 05保险类 06私立院校类 )
-        "haveLicenseNo" => "03",//资质类型 ( 01自然人 02个体户 03企业)
-        "mecTypeFlag" => "00",//商户类型(00普通单店商户(非连锁商户) 01连锁总 02连锁分 03 1+n总 04 1+n分
-        "cprRegNmCn" => "澧县xxxxx责任公司",//营业执照注册名称
-        "registCode" => "914xxxxxxRLX3",//营业执照注册号
-        "licenseMatch" => "00",//是否三证合一(00是  01否)
-        "cprRegAddr" => "西商xxxxxx无校验",//地址
-        "regProvCd" => "130000000000",//省编码(国标)
-        "regCityCd" => "130700000000",//市编码(国标)
-        "regDistCd" => "130728000000",//区编码(国标)
-        "mccCd" => "5309",//微信类目(和mcc传其一,如果都传,以mcc为准)
-        "csTelNo" => "13xxxxxx222",//客服电话
-
-        "identityName" => "郭xx",//法人姓名
-        "identityTyp" => "00",//法人证件类型
-        "identityNo" => "4324xxxxxxxxx3X",//法人证件号
-        "actNm" => "澧县xxxxxxxxxx公司",//结算账户名
-        "actTyp" => "00",//结算账户类型(00对公 01对私)
-        "stmManIdNo" => "4324xxxxxxX",//账户人身份证号
-        "actNo" => "622848xxxxxxxxx000",//结算卡号
-        "lbnkNo" => "1031xxxxxx17",//开户支行联行行号xxxxxx
-
-        "licensePic" => "f94aa57552f0434d80026bccb9820f59",//营业执照
-        "legalPersonidPositivePic" => "7fbd5e6d0610422292af5f88c32e58b7",//法人身份证正面
-        "legalPersonidOppositePic" => "89535a39b5d9450294d59dae776ccc32",//法人身份证反面
-        "storePic" => "d704fe706ad040a99981b7ac37b7cb89",//门头照片
-        "insideScenePic" => "4236c4f475da4e79b50f9186ac048a27",//真实商户内景图片
-        "openingAccountLicensePic" => "697b9ea61f08404abf80de59fd17f594",//开户许可证
-
-    );
-
-        $qrcodeType = array("01", "02", "06", "07");
-        $qrcoderate = array("0.2", "0.2", "0.2", "0.2");
-        $qrcodeList = array();
-        for ($i = 0; $i < count($qrcodeType); $i++) {
-            $arr = array(
-
-                "rateType" => $qrcodeType[$i],
-                "rate" => $qrcoderate[$i],
-            );
-            array_push($qrcodeList, $arr);
-        }
-        $qrcodeList = array(
-            "qrcodeList" => $qrcodeList
-        );
-        $array = array_merge($array, $qrcodeList);
-        $response = getJsonParam($array);
-        $aopClient = new AopClient();
-        $signContent = $aopClient->generateSign($response,$privateKey);
-        $sign = array(
-            "sign" => $signContent
-        );
-        $reqStr = array_merge($response, $sign);
-        $reqStr = json_encode($reqStr,320);
-        $requestUrl = 'https://openapi-test.tianquetech.com/merchant/income';
-        $resp = $aopClient->curl($requestUrl, $reqStr);
-        echo "resp" . $resp;
-
-        $result = json_decode($resp,320);
-
-        $signResult = $result["sign"];
-        echo "signResult" . $signResult;
-        //  result.remove("sign");
-        unset($result["sign"]);
-        //  String resultStr = RSASignature.getOrderContent(result);
-
-        //sign
-        /// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-        $signContent = $aopClient->getSignContent($result);
-        echo "<br><br><br><br>";
-        echo "signContent:".$signContent;
-
-        echo "<br><br><br><br>";
-
-        $verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-        //组装加密串
-        if ($verify) {
-            echo("验签成功");
-        }
-
-
-
-        function getJsonParam($reqData)
-        {
-            $reqDataJson = array(
-                "mblNo" => $reqData["mblNo"],//商户联系电话
-                "mecDisNm" => $reqData["mecDisNm"],//商户简称
-                "operationalType" => $reqData["operationalType"],//经营类型(01线下 02线上 03非盈利类 04缴费类 05保险类 06私立院校类 )
-                //"attachMerces3hantNo"=>  $reqData["attachMerchantNo"],//挂靠平台商编
-                "mecTypeFlag" => $reqData["mecTypeFlag"],//商户类型(新: 00普通单店商户(非连锁商户)01连锁总 02连锁分 03 1+n总 04 1+n分,旧:01线上平台入驻 02普通 03连锁总店 04连锁分店  05 1+n总  06 1+n分)
-                "haveLicenseNo" => $reqData["haveLicenseNo"],//资质类型 ( 01自然人 02个体户 03企业)
-                //"parentMno"=>  $reqData["parentMno"],//所属总店商户编号
-                //"independentModel"=>  $reqData["independentModel"],//分店是否独立结算(00是 01否)
-                "qrcodeList" => $reqData["qrcodeList"],//二维码费率(01微信 02支付宝)
-                //"settleType"=>  $reqData["settleType"],//结算类型(新:03 T1 04 D1,旧:01-T1 02-D1)---默认值为D1
-                //"supportPayChannels"=>  $reqData["supportPayChannels"],//支持的支付渠道(01微信 02支付宝 03银联)不填默认全开
-                //"supportTradeTypes"=>  $reqData["supportTradeTypes"],//支持的交易类型(01主扫 02被扫 03公众号 04退货 05APP)不填默认全开
-                //"specifyWechatChannel"=>  $reqData["specifyWechatChannel"],//指定微信渠道号
-                //"onlineType"=>  $reqData["onlineType"],//线上普通商户类型 ( 01APP 02网站 03公众号)
-                //"onlineName"=>  $reqData["onlineName"],//线上普通商户名称 (APP名称/网站网址/公众号名称)
-                //"onlineTypeInfo"=>  $reqData["onlineTypeInfo"],//线上普通商户信息 (APP下载地址及账号信息)
-                "cprRegNmCn" => $reqData["cprRegNmCn"],//营业执照注册名称
-                "registCode" => $reqData["registCode"],//营业执照注册号
-                "licenseMatch" => $reqData["licenseMatch"],//是否三证合一(00是  01否)
-                //"orgCode"=>  $reqData["orgCode"],//组织机构代码
-                //"taxRegNo"=>  $reqData["taxRegNo"],//税务登记号
-                //"businessLicStt"=>  $reqData["businessLicStt"],//营业执照起始日
-                //"businessLicEnt"=>  $reqData["businessLicEnt"],//营业执照到期日
-                "cprRegAddr" => $reqData["cprRegAddr"],//地址
-                "regProvCd" => $reqData["regProvCd"],//省编码(国标)
-                "regCityCd" => $reqData["regCityCd"],//市编码(国标)
-                "regDistCd" => $reqData["regDistCd"],//区编码(国标)
-                "mccCd" => $reqData["mccCd"],//微信类目(和mcc传其一,如果都传,以mcc为准)
-                "csTelNo" => $reqData["csTelNo"],//客服电话
-                "identityName" => $reqData["identityName"],//法人姓名
-                "identityTyp" => $reqData["identityTyp"],//法人证件类型
-                "identityNo" => $reqData["identityNo"],//法人证件号
-                //"legalPersonLicStt"=>  $reqData["legalPersonLicStt"],//法人身份证开始日期
-                //"legalPersonLicEnt"=>  $reqData["legalPersonLicEnt"],//法人身份证结束日期
-                "actNm" => $reqData["actNm"],//结算账户名
-                "actTyp" => $reqData["actTyp"],//结算账户类型(00对公 01对私)
-                "stmManIdNo" => $reqData["stmManIdNo"],//账户人身份证号
-                //"accountLicStt"=>  $reqData["accountLicStt"],//账户人证件号起始日
-                //"accountLicEnt"=>  $reqData["accountLicEnt"],//账户人证件号到期日
-                "actNo" => $reqData["actNo"],//结算卡号
-                "lbnkNo" => $reqData["lbnkNo"],//开户支行联行行号
-                //"lbnkNm"=>  $reqData["lbnkNm"],//开户支行名称
-                "licensePic" => $reqData["licensePic"],//营业执照
-                //"taxRegistLicensePic"=>  $reqData["taxRegistLicensePic"],//税务登记证
-                //"orgCodePic"=>  $reqData["orgCodePic"],//组织机构代码证
-                "legalPersonidPositivePic" => $reqData["legalPersonidPositivePic"],//法人身份证正面
-                "legalPersonidOppositePic" => $reqData["legalPersonidOppositePic"],//法人身份证反面
-                "openingAccountLicensePic" => $reqData["openingAccountLicensePic"],//开户许可证
-                //"bankCardPositivePic"=>  $reqData["bankCardPositivePic"],//银行卡正面
-                //"bankCardOppositePic"=>  $reqData["bankCardOppositePic"],//银行卡反面
-                //"settlePersonIdcardOpposite"=>  $reqData["settlePersonIdcardOpposite"],//结算人身份证反面
-                //"settlePersonIdcardPositive"=>  $reqData["settlePersonIdcardPositive"],//结算人身份证正面
-                //"merchantAgreementPic"=>  $reqData["merchantAgreementPic"],//商户协议照片
-                "storePic" => $reqData["storePic"],//门头照片
-                "insideScenePic" => $reqData["insideScenePic"],//真实商户内景图片
-                //"businessPlacePic"=>  $reqData["businessPlacePic"],//经营场所-含收银台
-                //"merchantEnterProtocol"=>  $reqData["merchantEnterProtocol"],//商家入驻协议
-                //"icpLicence"=>  $reqData["icpLicence"],//ICP许可证
-                //"handIdcardPic"=>  $reqData["handIdcardPic"],//手持身份证照片
-                //"leaseAgreementThreePic"=>  $reqData["leaseAgreementThreePic"],//租赁协议三(签章页)
-                //"leaseAgreementTwoPic"=>  $reqData["leaseAgreementTwoPic"],//租赁协议二(面积、有效期页)
-                //"leaseAgreementOnePic"=>  $reqData["leaseAgreementOnePic"],//租赁协议一(封面)
-                //"otherMaterialPictureOne"=>  $reqData["otherMaterialPictureOne"],//其他资料照片1
-                //"otherMaterialPictureTwo"=>  $reqData["otherMaterialPictureTwo"],//其他资料照片2
-                //"otherMaterialPictureThree"=>  $reqData["otherMaterialPictureThree"],//其他资料照片3
-                //"otherMaterialPictureFour"=>  $reqData["otherMaterialPictureFour"],//其他资料照片4
-                //"otherMaterialPictureFive"=>  $reqData["otherMaterialPictureFive"],//其他资料照片5
-                //"agentPersonSignature"=>  $reqData["agentPersonSignature"],//代理人签名
-                //"confirmPersonSignature"=>  $reqData["confirmPersonSignature"],//确认人签名
-                //"letterOfAuthPic"=>  $reqData["letterOfAuthPic"],//非法人结算授权函
-                //"unionSettleWithoutLicense"=>  $reqData["unionSettleWithoutLicense"],//统一结算无营业执照说明
-                //"societyGroupLegPerPic"=>  $reqData["societyGroupLegPerPic"],//社会团体法人证书
-                //"foundationLegPerRegPic"=>  $reqData["foundationLegPerRegPic"],//基金会法人登记证书
-                //"schoolLicese"=>  $reqData["schoolLicese"],//办学许可证
-                //"medicalInstitutionLicense"=>  $reqData["medicalInstitutionLicense"],//医疗机构办学许可证
-                //"insuranceLicese"=>  $reqData["insuranceLicese"],//经营保险业务许可证
-                //"insuranceLegPerGradePic"=>  $reqData["insuranceLegPerGradePic"],//保险业务法人等级证书
-                //"privateEducationLicense"=>  $reqData["privateEducationLicense"],//民办教育许可证
-                //"chargeProofPic"=>  $reqData["chargeProofPic"],//收费证明文件
-
-                //"Add("societyGroupLegPerPic", $reqData["societyGroupLegPerPic"]),//其他资料照片1
-                //"Add("foundationLegPerRegPic", $reqData["foundationLegPerRegPic"]),//其他资料照片2
-                //"Add("schoolLicese", $reqData["schoolLicese"]),//其他资料照片3
-                //"Add("medicalInstitutionLicense", $reqData["medicalInstitutionLicense"]),//其他资料照片4
-                //"Add("insuranceLicese", $reqData["insuranceLicese"]),//其他资料照片5
-                //"Add("insuranceLegPerGradePic", $reqData["insuranceLegPerGradePic"]),//其他资料照片5
-                //"Add("privateEducationLicense", $reqData["privateEducationLicense"]),//其他资料照片5
-                //"Add("chargeProofPic", $reqData["chargeProofPic"]),//其他资料照片5
-            );
-
-
-            $reqJson = array(
-                "reqData" => $reqDataJson,
-                "orgId" => $reqData["orgId"],
-                "reqId" => $reqData["reqId"],
-                "version" => "1.0",//OEM和代理商的要传2.0,服务商传1.0
-                "signType" => "RSA",
-                "timestamp" => 1583570048783,
-            );
-
-
-            return $reqJson;
-        }
-
-?>

+ 0 - 16
app/phpPay/SignData.php

@@ -1,16 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: jiehua
- * Date: 15/5/2
- * Time: 下午6:21
- */
-
-class SignData {
-
-    public $signSourceData=null;
-
-
-    public $sign=null;
-
-} 

+ 0 - 90
app/phpPay/TradeActiveScan.php

@@ -1,90 +0,0 @@
-<?php
-//交易主扫(C扫B)
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAI6aysW0U9OcTN+kn+EOXlE4MHHDiL0THc2aYb83sDX5vLTfbNlmAsul02HzLmi2MVjQTfs3KvgUYoVFJK4OJOTy9/Hem/oiZLVHGOODip1Uch+qEJ4HRnZk+4EPcZuPyEcUS1dmrz6awAW7/llCOJWGCzlZYGOHngthZK6b5337AgMBAAECgYAEqku37A5R/esF5fzVAANV5OCw2BTBGr7+2u4Xs1qwaVsjD6wf8JZm0yX3Ll12T3+NyELE1SkytHgEpB5vE0dhqW0BEft+Z0RWERxyszAbW2y/lk23rN0TMefmxbGUYR2CJF1x5cGv0Cl+s8RtJ/3OcpNmiZoystRvWhMbySClAQJBAN3ewdzK5i/T/kXXEmNkptQO0AI0eNdj9v0s2NWIDj7q7yE8OK7U4cPv+E7qvzq3IrJATwRFJUzZ4xsqAvLjTOUCQQCkio+mhoY+p/VmNeYvGMNz9RnMevQplhKhtMj9sPI/cfg0EEhdoktsoG1Gfnn6u+dRqVl/DGa0LuHEBmODO9FfAkAIIAA5dbS4S6skI5wox6bUXTaA3isOuDpzSxElwLXE2BWpwerRfDpIUqFlQnN+UvaSUIiUP3P+PHx0ojU5b9mBAkBZ8m0IyW1FfyeFUl2czVq7XvdVcrlaqnFQ+LUPCdXDnRfjzirhFMFKhoB2Etm3mVSgrYUBENRsF1zPffaUXPTdAkBsy1U3YULc1lbgIZoa5N+nn60IbEuLkcW22DM+GGS+BejCR4cGF/4NPw6yVLEikGGxvaX6jg+/jAoF0GDlYmVH";
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB";
-$aopClient = new AopClient();
-	$array = [
-            //业务参数
-            "mno"=> "399190910000387", //商户编号
-		    "ordNo"=> time(), //商户订单号
-		    //"subMechId"=> "", //子商户号
-		    //"subAppid"=> "", //微信 subAppId
-			"amt"=> "0.02", //订单总金额
-			//"discountAmt"=> "", //参与优惠金额
-			//"unDiscountAmt"=> "", //不参与优惠金额
-			"payType"=> "WECHAT", //支付渠道
-			"subject"=> "C扫B测试",
-            "tradeSource"=> "01", //交易来源 01服务商,02收银台,03硬件
-			"trmIp"=> "127.0.0.1",
-			//"hbFqNum"=> "6", //花呗分期数,仅可上送 6 或 12
-			//"hbFqPercent"=> "0", //卖家承担分期 服务费比例,仅支持上送 0 或 100
-			//"limitPay"=> "00", //限制卡类型: 00-全部 01-限定不能使 用信用卡支付 默认值 00
-			//"timeExpire"=> "10", //订单失效时间
-			//"goodsTag"=> "00", //订单优惠标识 00:是,01: 否
-			//"couponDetail"=> "", //优惠详情信息,见下面三个字段
-			//"costPrice"=> "200", //订单原价保留两 位小数;微信 独有
-			//"receiptId"=> "123456789", //商品小票
-			//"goodsDetail"=> "123456789", //单品优惠信息使用 json 数组格式提交
-			//"goodsId"=> "200", //商品编码
-			//"thirdGoodsId"=> "12345678", //微信/支付宝侧商品码
-			//"goodsName"=> "苹果电脑", //商品名称
-			//"quantity"=> "1", //商品数量
-			//"price"=> "1.01", //商品单价
-			//"goodsCategory"=> "", //商品类目;支 付宝独有
-			//"categoriesTree"=> "124868003|126232002|126252004", //商品类目树
-			//"goodsDesc"=> "", //商品描述;支 付宝独有
-			//"showUrl"=> "", //商品展示地址 url;支付宝独有
-			//"needReceipt"=> "00", //电子发票功能 微信开具电子 发票使用
-			//"ledgerAccountFlag"=> "00", //是否做分账 分账交易使 用;00:做; 01:不做;不传默认为不做分账
-			//"ledgerAccountEffectTime"=> "00", //分账有效时间 单位为天;是 否做分账选择 00 时该字段必传
-			//"notifyUrl"=> "", //回调地址
-			//"ylTrmNo"=> "", //银联终端号
-			//"terminalId"=> "", //TQ机具编号
-			//"deviceNo"=> "", //设备号
-			//"identityFlag"=> "", //是否是实名支付
-			//"buyerIdType"=> "IDCARD", //证件类型
-			//"buyerIdNo"=> "410523198701054018", //证件号
-			//"buyerName"=> "张三", //买家姓名
-			//"mobileNum"=> "", //手机号
-			//"extend"=> "" //备用
-	];
-
-	$reqBean = [
-		"orgId" =>"26680846",
-		"reqData"=>$array,
-		"reqId" => time(),
-		"signType" => "RSA",
-		"timestamp" => date("Y-m-d h:i:s"),
-		"version" => "1.0",
-	];
-
-
-	$signContent = $aopClient->generateSign($reqBean,$privateKey);
-	$sign =["sign" => $signContent];
-	$reqStr = array_merge($reqBean, $sign);
-	$reqStr = json_encode($reqStr,320);
-	$requestUrl = 'https://openapi-test.tianquetech.com/order/activeScan';
-	$resp = $aopClient->curl($requestUrl, $reqStr);
-	$result = json_decode($resp,320);
-	print_r($result);
-	$signResult = $result["sign"];
-	//  result.remove("sign");
-	unset($result["sign"]);
-	//  String resultStr = RSASignature.getOrderContent(result);
-
-	//sign
-	/// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-	$signContent = $aopClient->getSignContent($result);
-
-	$verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-	//组装加密串
-	if ($verify) {
-		echo("验签成功");
-	}else{
-		echo("验签失败");
-	}
-?>

+ 0 - 109
app/phpPay/TradeJsApiScan.php

@@ -1,109 +0,0 @@
-<?php
-//聚合支付
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMMNNYaXLfqFBKNW
-j7wocV4s1cC88tGwYBt3lVD8WGm12iuqHB20ybUsCof4r4IYWR74IcyWUNqTrzSJ
-K3cEmk2MtAmI7COZJTv9r4DnxbCARnKgyN18l+idXQf91YiGREnGPKZ1R1kQ+A+7
-6rtAsZILmg0lZAJ7xa4J8Za/0lafAgMBAAECgYBUeschGR+H7s74c8hjZVzcviyC
-gxPkcDDgFKYuYm1ks6ff25i74Q6wEngpNjPF9Ae9mxkAhGZWlTqAVZzmuq6dgG7D
-aKqXNXkdDgovHEwHcRO1Rhfb3Rv0oYhzhldi7m0QobuvslMZRoVH76Ehes2Pfu3Z
-Lcbq30D47CeRBUyA6QJBAOBIExJvtK6xIcOO1JBmi9dmk9SKuDrnltnGvT1E8WTg
-B/Di3d/moksNLYTijTjimnVcQ6XV6ZQkEZOkes/Q/HUCQQDeouOS0HQ35T04A9tM
-UDOKMObIAwAUyRi01N0/Shi5VQq2RyWPB8YQQT54NeeFkSGXnj4iJV+jWdsK8gkE
-ZrRDAkB3K/TuW+qu1DHznkY2QDbYCopMajVAH2RZbS+KicKWbi/qADIS0ZK0vFjO
-fi655jZaW98aFBLcA1pPkBstp4ctAkEA1Rt+Uq4OUOKxcsjeRXIPo5ujjJiynzLO
-32lSTp6Sg/SPSGNZ5EtAn5aUQWT3tLZzPTpPp0e3ABmmvhdn4jqdGQJBANW54TYs
-Eh6jurxh77vtVS0I2RNhUS8dkDCFqDtFI99r2hN0hxIAz11U7p42gyUVmXb4PAgI
-awQyTrfxvQ8Mty0=";
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDDTWGly36hQSjVo+8KHFeLNXA
-vPLRsGAbd5VQ/FhptdorqhwdtMm1LAqH+K+CGFke+CHMllDak680iSt3BJpNjLQJ
-iOwjmSU7/a+A58WwgEZyoMjdfJfonV0H/dWIhkRJxjymdUdZEPgPu+q7QLGSC5oN
-JWQCe8WuCfGWv9JWnwIDAQAB";
-$aopClient = new AopClient();
-	$array = [
-            //业务参数
-            "mno"=> "399190910000387", //商户编号
-		    "ordNo"=> time(), //商户订单号
-		    //"subMechId"=> "", //子商户号
-		    //"subAppid"=> "", //微信 subAppId
-			"amt"=> "0.02", //订单总金额
-			//"discountAmt"=> "", //参与优惠金额
-			//"unDiscountAmt"=> "", //不参与优惠金额
-			"payType"=> "WECHAT", //支付渠道
-			"payWay"=> "02", //支付方式  02 公众号/服 务窗/js支付 03 小程序
-			"subject"=> "聚合支付测试",
-            "tradeSource"=> "01", //交易来源 01服务商,02收银台,03硬件
-			"trmIp"=> "127.0.0.1",
-			"customerIp"=> "", //持卡人ip地址,银联js支付时必传
-			"userId"=> "2088101117955611", //用户号 微信:openid; 支付宝:userid;银联:userid;微信&支付宝必传,银联js为非必传
-			//"hbFqNum"=> "6", //花呗分期数,仅可上送 6 或 12
-			//"hbFqPercent"=> "0", //卖家承担分期 服务费比例,仅支持上送 0 或 100
-			//"limitPay"=> "00", //限制卡类型: 00-全部 01-限定不能使 用信用卡支付 默认值 00
-			//"timeExpire"=> "10", //订单失效时间
-			//"goodsTag"=> "00", //订单优惠标识 00:是,01: 否
-			//"couponDetail"=> "", //优惠详情信息,见下面三个字段
-			//"costPrice"=> "200", //订单原价保留两 位小数;微信 独有
-			//"receiptId"=> "123456789", //商品小票
-			//"goodsDetail"=> "123456789", //单品优惠信息使用 json 数组格式提交
-			//"goodsId"=> "200", //商品编码
-			//"thirdGoodsId"=> "12345678", //微信/支付宝侧商品码
-			//"goodsName"=> "苹果电脑", //商品名称
-			//"quantity"=> "1", //商品数量
-			//"price"=> "1.01", //商品单价
-			//"goodsCategory"=> "", //商品类目;支 付宝独有
-			//"categoriesTree"=> "124868003|126232002|126252004", //商品类目树
-			//"goodsDesc"=> "", //商品描述;支 付宝独有
-			//"showUrl"=> "", //商品展示地址 url;支付宝独有
-			//"needReceipt"=> "00", //电子发票功能 微信开具电子 发票使用
-			//"ledgerAccountFlag"=> "00", //是否做分账 分账交易使 用;00:做; 01:不做;不传默认为不做分账
-			//"ledgerAccountEffectTime"=> "00", //分账有效时间 单位为天;是 否做分账选择 00 时该字段必传
-			//"notifyUrl"=> "", //回调地址
-			//"ylTrmNo"=> "", //银联终端号
-			//"terminalId"=> "", //TQ机具编号
-			//"deviceNo"=> "", //设备号
-			//"identityFlag"=> "", //是否是实名支付
-			//"buyerIdType"=> "IDCARD", //证件类型
-			//"buyerIdNo"=> "410523198701054018", //证件号
-			//"buyerName"=> "张三", //买家姓名
-			//"mobileNum"=> "", //手机号
-			//"extend"=> "" //备用
-	];
-
-	$reqBean = [
-		"orgId" =>"90589021",
-		"reqData"=>$array,
-		"reqId" => time(),
-		"signType" => "RSA",
-		"timestamp" => date("Y-m-d h:i:s"),
-		"version" => "1.0",
-	];
-
-
-	$signContent = $aopClient->generateSign($reqBean,$privateKey);
-	$sign =["sign" => $signContent];
-	$reqStr = array_merge($reqBean, $sign);
-	$reqStr = json_encode($reqStr,320);
-	$requestUrl = 'https://openapi-test.tianquetech.com/order/jsapiScan';
-	$resp = $aopClient->curl($requestUrl, $reqStr);
-	$result = json_decode($resp,320);
-	print_r($result);
-	$signResult = $result["sign"];
-	//  result.remove("sign");
-	unset($result["sign"]);
-	//  String resultStr = RSASignature.getOrderContent(result);
-
-	//sign
-	/// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-	$signContent = $aopClient->getSignContent($result);
-
-	$verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-	//组装加密串
-	if ($verify) {
-		echo("验签成功");
-	}else{
-		echo("验签失败");
-	}
-?>

+ 0 - 55
app/phpPay/TradeQuery.php

@@ -1,55 +0,0 @@
-<?php
-//正交易(主扫,被扫,聚合支付)查询
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAI6aysW0U9OcTN+kn+EOXlE4MHHDiL0THc2aYb83sDX5vLTfbNlmAsul02HzLmi2MVjQTfs3KvgUYoVFJK4OJOTy9/Hem/oiZLVHGOODip1Uch+qEJ4HRnZk+4EPcZuPyEcUS1dmrz6awAW7/llCOJWGCzlZYGOHngthZK6b5337AgMBAAECgYAEqku37A5R/esF5fzVAANV5OCw2BTBGr7+2u4Xs1qwaVsjD6wf8JZm0yX3Ll12T3+NyELE1SkytHgEpB5vE0dhqW0BEft+Z0RWERxyszAbW2y/lk23rN0TMefmxbGUYR2CJF1x5cGv0Cl+s8RtJ/3OcpNmiZoystRvWhMbySClAQJBAN3ewdzK5i/T/kXXEmNkptQO0AI0eNdj9v0s2NWIDj7q7yE8OK7U4cPv+E7qvzq3IrJATwRFJUzZ4xsqAvLjTOUCQQCkio+mhoY+p/VmNeYvGMNz9RnMevQplhKhtMj9sPI/cfg0EEhdoktsoG1Gfnn6u+dRqVl/DGa0LuHEBmODO9FfAkAIIAA5dbS4S6skI5wox6bUXTaA3isOuDpzSxElwLXE2BWpwerRfDpIUqFlQnN+UvaSUIiUP3P+PHx0ojU5b9mBAkBZ8m0IyW1FfyeFUl2czVq7XvdVcrlaqnFQ+LUPCdXDnRfjzirhFMFKhoB2Etm3mVSgrYUBENRsF1zPffaUXPTdAkBsy1U3YULc1lbgIZoa5N+nn60IbEuLkcW22DM+GGS+BejCR4cGF/4NPw6yVLEikGGxvaX6jg+/jAoF0GDlYmVH";
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB";
-$aopClient = new AopClient();
-	$array = [
-            //业务参数
-            "mno"=> "399190910000387", //商户编号
-		    //下面三个至少传一个
-		    "ordNo"=> "", //商户订单号
-		    "uuid"=> "", //科技公司订单号
-		    "transactionId"=> "", //正交易落单号
-		    //"terminalId"=> "", //TQ 机具编号, 支付来源为硬 件时,该参数 为必传;
-		    //"deviceNo"=> ""//设备号
-	];
-
-	$reqBean = [
-		"orgId" =>"26680846",
-		"reqData"=>$array,
-		"reqId" => time(),
-		"signType" => "RSA",
-		"timestamp" => date("Y-m-d h:i:s"),
-		"version" => "1.0",
-	];
-
-
-	$signContent = $aopClient->generateSign($reqBean,$privateKey);
-	$sign =["sign" => $signContent];
-	$reqStr = array_merge($reqBean, $sign);
-	$reqStr = json_encode($reqStr,320);
-	$requestUrl = 'https://openapi-test.tianquetech.com/query/tradeQuery';
-	$resp = $aopClient->curl($requestUrl, $reqStr);
-	$result = json_decode($resp,320);
-	print_r($result);
-	$signResult = $result["sign"];
-	//  result.remove("sign");
-	unset($result["sign"]);
-	//  String resultStr = RSASignature.getOrderContent(result);
-
-	//sign
-	/// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-	$signContent = $aopClient->getSignContent($result);
-
-	$verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-	//组装加密串
-	if ($verify) {
-		echo("验签成功");
-	}else{
-		echo("验签失败");
-	}
-?>

+ 0 - 58
app/phpPay/TradeRefund.php

@@ -1,58 +0,0 @@
-<?php
-//交易退款
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAI6aysW0U9OcTN+kn+EOXlE4MHHDiL0THc2aYb83sDX5vLTfbNlmAsul02HzLmi2MVjQTfs3KvgUYoVFJK4OJOTy9/Hem/oiZLVHGOODip1Uch+qEJ4HRnZk+4EPcZuPyEcUS1dmrz6awAW7/llCOJWGCzlZYGOHngthZK6b5337AgMBAAECgYAEqku37A5R/esF5fzVAANV5OCw2BTBGr7+2u4Xs1qwaVsjD6wf8JZm0yX3Ll12T3+NyELE1SkytHgEpB5vE0dhqW0BEft+Z0RWERxyszAbW2y/lk23rN0TMefmxbGUYR2CJF1x5cGv0Cl+s8RtJ/3OcpNmiZoystRvWhMbySClAQJBAN3ewdzK5i/T/kXXEmNkptQO0AI0eNdj9v0s2NWIDj7q7yE8OK7U4cPv+E7qvzq3IrJATwRFJUzZ4xsqAvLjTOUCQQCkio+mhoY+p/VmNeYvGMNz9RnMevQplhKhtMj9sPI/cfg0EEhdoktsoG1Gfnn6u+dRqVl/DGa0LuHEBmODO9FfAkAIIAA5dbS4S6skI5wox6bUXTaA3isOuDpzSxElwLXE2BWpwerRfDpIUqFlQnN+UvaSUIiUP3P+PHx0ojU5b9mBAkBZ8m0IyW1FfyeFUl2czVq7XvdVcrlaqnFQ+LUPCdXDnRfjzirhFMFKhoB2Etm3mVSgrYUBENRsF1zPffaUXPTdAkBsy1U3YULc1lbgIZoa5N+nn60IbEuLkcW22DM+GGS+BejCR4cGF/4NPw6yVLEikGGxvaX6jg+/jAoF0GDlYmVH";
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB";
-$aopClient = new AopClient();
-	$array = [
-            //业务参数
-            "mno"=> "399190910000387", //商户编号
-		    "ordNo"=> time(), //商户订单号
-		    //下面三个至少传一个
-		    "origOrderNo"=> "", //原商户订单号
-		    "origUuid"=> "", //原交易科技公司订单号
-		    "origSxfUuid"=> "", //正交易落单号
-		    "amt"=> "88.88", //正交易落单号
-		   // "notifyUrl"=> "", //回调推送地址,用来接收科技公司的异步推送
-		    "refundReason"=> "退货", //退货原因
-		    "extend"=> "" //备用
-	];
-
-	$reqBean = [
-		"orgId" =>"26680846",
-		"reqData"=>$array,
-		"reqId" => time(),
-		"signType" => "RSA",
-		"timestamp" => date("Y-m-d h:i:s"),
-		"version" => "1.0",
-	];
-
-
-	$signContent = $aopClient->generateSign($reqBean,$privateKey);
-	$sign =["sign" => $signContent];
-	$reqStr = array_merge($reqBean, $sign);
-	$reqStr = json_encode($reqStr,320);
-	$requestUrl = 'https://openapi-test.tianquetech.com/order/refund';
-	$resp = $aopClient->curl($requestUrl, $reqStr);
-	$result = json_decode($resp,320);
-	print_r($result);
-	$signResult = $result["sign"];
-	//  result.remove("sign");
-	unset($result["sign"]);
-	//  String resultStr = RSASignature.getOrderContent(result);
-
-	//sign
-	/// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-	$signContent = $aopClient->getSignContent($result);
-
-	$verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-	//组装加密串
-	if ($verify) {
-		echo("验签成功");
-	}else{
-		echo("验签失败");
-	}
-?>

+ 0 - 52
app/phpPay/TradeRefundQuery.php

@@ -1,52 +0,0 @@
-<?php
-//退款查询
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAI6aysW0U9OcTN+kn+EOXlE4MHHDiL0THc2aYb83sDX5vLTfbNlmAsul02HzLmi2MVjQTfs3KvgUYoVFJK4OJOTy9/Hem/oiZLVHGOODip1Uch+qEJ4HRnZk+4EPcZuPyEcUS1dmrz6awAW7/llCOJWGCzlZYGOHngthZK6b5337AgMBAAECgYAEqku37A5R/esF5fzVAANV5OCw2BTBGr7+2u4Xs1qwaVsjD6wf8JZm0yX3Ll12T3+NyELE1SkytHgEpB5vE0dhqW0BEft+Z0RWERxyszAbW2y/lk23rN0TMefmxbGUYR2CJF1x5cGv0Cl+s8RtJ/3OcpNmiZoystRvWhMbySClAQJBAN3ewdzK5i/T/kXXEmNkptQO0AI0eNdj9v0s2NWIDj7q7yE8OK7U4cPv+E7qvzq3IrJATwRFJUzZ4xsqAvLjTOUCQQCkio+mhoY+p/VmNeYvGMNz9RnMevQplhKhtMj9sPI/cfg0EEhdoktsoG1Gfnn6u+dRqVl/DGa0LuHEBmODO9FfAkAIIAA5dbS4S6skI5wox6bUXTaA3isOuDpzSxElwLXE2BWpwerRfDpIUqFlQnN+UvaSUIiUP3P+PHx0ojU5b9mBAkBZ8m0IyW1FfyeFUl2czVq7XvdVcrlaqnFQ+LUPCdXDnRfjzirhFMFKhoB2Etm3mVSgrYUBENRsF1zPffaUXPTdAkBsy1U3YULc1lbgIZoa5N+nn60IbEuLkcW22DM+GGS+BejCR4cGF/4NPw6yVLEikGGxvaX6jg+/jAoF0GDlYmVH";
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB";
-$aopClient = new AopClient();
-	$array = [
-            //业务参数
-            "mno"=> "399190910000387", //商户编号
-		    //下面两个至少传一个
-		    "ordNo"=> "", //商户订单号
-		    "uuid"=> "" //科技公司订单号
-	];
-
-	$reqBean = [
-		"orgId" =>"26680846",
-		"reqData"=>$array,
-		"reqId" => time(),
-		"signType" => "RSA",
-		"timestamp" => date("Y-m-d h:i:s"),
-		"version" => "1.0",
-	];
-
-
-	$signContent = $aopClient->generateSign($reqBean,$privateKey);
-	$sign =["sign" => $signContent];
-	$reqStr = array_merge($reqBean, $sign);
-	$reqStr = json_encode($reqStr,320);
-	$requestUrl = 'https://openapi-test.tianquetech.com/query/refundQuery';
-	$resp = $aopClient->curl($requestUrl, $reqStr);
-	$result = json_decode($resp,320);
-	print_r($result);
-	$signResult = $result["sign"];
-	//  result.remove("sign");
-	unset($result["sign"]);
-	//  String resultStr = RSASignature.getOrderContent(result);
-
-	//sign
-	/// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-	$signContent = $aopClient->getSignContent($result);
-
-	$verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-	//组装加密串
-	if ($verify) {
-		echo("验签成功");
-	}else{
-		echo("验签失败");
-	}
-?>

+ 0 - 92
app/phpPay/TradeReverseScan.php

@@ -1,92 +0,0 @@
-<?php
-//交易被扫(B扫C)
-header("Content-type: text/html; charset=utf-8");
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'AopClient.php';
-
-$privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAI6aysW0U9OcTN+kn+EOXlE4MHHDiL0THc2aYb83sDX5vLTfbNlmAsul02HzLmi2MVjQTfs3KvgUYoVFJK4OJOTy9/Hem/oiZLVHGOODip1Uch+qEJ4HRnZk+4EPcZuPyEcUS1dmrz6awAW7/llCOJWGCzlZYGOHngthZK6b5337AgMBAAECgYAEqku37A5R/esF5fzVAANV5OCw2BTBGr7+2u4Xs1qwaVsjD6wf8JZm0yX3Ll12T3+NyELE1SkytHgEpB5vE0dhqW0BEft+Z0RWERxyszAbW2y/lk23rN0TMefmxbGUYR2CJF1x5cGv0Cl+s8RtJ/3OcpNmiZoystRvWhMbySClAQJBAN3ewdzK5i/T/kXXEmNkptQO0AI0eNdj9v0s2NWIDj7q7yE8OK7U4cPv+E7qvzq3IrJATwRFJUzZ4xsqAvLjTOUCQQCkio+mhoY+p/VmNeYvGMNz9RnMevQplhKhtMj9sPI/cfg0EEhdoktsoG1Gfnn6u+dRqVl/DGa0LuHEBmODO9FfAkAIIAA5dbS4S6skI5wox6bUXTaA3isOuDpzSxElwLXE2BWpwerRfDpIUqFlQnN+UvaSUIiUP3P+PHx0ojU5b9mBAkBZ8m0IyW1FfyeFUl2czVq7XvdVcrlaqnFQ+LUPCdXDnRfjzirhFMFKhoB2Etm3mVSgrYUBENRsF1zPffaUXPTdAkBsy1U3YULc1lbgIZoa5N+nn60IbEuLkcW22DM+GGS+BejCR4cGF/4NPw6yVLEikGGxvaX6jg+/jAoF0GDlYmVH";
-$sxfPublic =
-    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY0E37Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB";
-$aopClient = new AopClient();
-	$array = [
-            //业务参数
-            "mno"=> "399190910000387", //商户编号
-		    "ordNo"=> time(), //商户订单号
-		    //"subMechId"=> "", //子商户号
-		    //"subAppid"=> "", //微信 subAppId
-			"amt"=> "0.02", //订单总金额
-			"authCode"=> "28763400000664394", //授权码
-			//"discountAmt"=> "", //参与优惠金额
-			//"unDiscountAmt"=> "", //不参与优惠金额
-			"payType"=> "WECHAT", //支付渠道
-			"scene"=> "3", ////支付场景,1: 刷卡 2:声波 3:刷脸   不上传默认为 1
-			"subject"=> "B扫C测试",
-            "tradeSource"=> "01", //交易来源 01服务商,02收银台,03硬件
-			"trmIp"=> "127.0.0.1",
-			//"hbFqNum"=> "6", //花呗分期数,仅可上送 6 或 12
-			//"hbFqPercent"=> "0", //卖家承担分期 服务费比例,仅支持上送 0 或 100
-			//"limitPay"=> "00", //限制卡类型: 00-全部 01-限定不能使 用信用卡支付 默认值 00
-			//"timeExpire"=> "10", //订单失效时间
-			//"goodsTag"=> "00", //订单优惠标识 00:是,01: 否
-			//"couponDetail"=> "", //优惠详情信息,见下面三个字段
-			//"costPrice"=> "200", //订单原价保留两 位小数;微信 独有
-			//"receiptId"=> "123456789", //商品小票
-			//"goodsDetail"=> "123456789", //单品优惠信息使用 json 数组格式提交
-			//"goodsId"=> "200", //商品编码
-			//"thirdGoodsId"=> "12345678", //微信/支付宝侧商品码
-			//"goodsName"=> "苹果电脑", //商品名称
-			//"quantity"=> "1", //商品数量
-			//"price"=> "1.01", //商品单价
-			//"goodsCategory"=> "", //商品类目;支 付宝独有
-			//"categoriesTree"=> "124868003|126232002|126252004", //商品类目树
-			//"goodsDesc"=> "", //商品描述;支 付宝独有
-			//"showUrl"=> "", //商品展示地址 url;支付宝独有
-			//"needReceipt"=> "00", //电子发票功能 微信开具电子 发票使用
-			//"ledgerAccountFlag"=> "00", //是否做分账 分账交易使 用;00:做; 01:不做;不传默认为不做分账
-			//"ledgerAccountEffectTime"=> "00", //分账有效时间 单位为天;是 否做分账选择 00 时该字段必传
-			//"notifyUrl"=> "", //回调地址
-			//"ylTrmNo"=> "", //银联终端号
-			//"terminalId"=> "", //TQ机具编号
-			//"deviceNo"=> "", //设备号
-			//"identityFlag"=> "", //是否是实名支付
-			//"buyerIdType"=> "IDCARD", //证件类型
-			//"buyerIdNo"=> "410523198701054018", //证件号
-			//"buyerName"=> "张三", //买家姓名
-			//"mobileNum"=> "", //手机号
-			//"extend"=> "" //备用
-	];
-
-	$reqBean = [
-		"orgId" =>"26680846",
-		"reqData"=>$array,
-		"reqId" => time(),
-		"signType" => "RSA",
-		"timestamp" => date("Y-m-d h:i:s"),
-		"version" => "1.0",
-	];
-
-
-	$signContent = $aopClient->generateSign($reqBean,$privateKey);
-	$sign =["sign" => $signContent];
-	$reqStr = array_merge($reqBean, $sign);
-	$reqStr = json_encode($reqStr,320);
-	$requestUrl = 'https://openapi-test.tianquetech.com/order/reverseScan';
-	$resp = $aopClient->curl($requestUrl, $reqStr);
-	$result = json_decode($resp,320);
-	print_r($result);
-	$signResult = $result["sign"];
-	//  result.remove("sign");
-	unset($result["sign"]);
-	//  String resultStr = RSASignature.getOrderContent(result);
-
-	//sign
-	/// String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, privateKey));
-	$signContent = $aopClient->getSignContent($result);
-
-	$verify = $aopClient->verify($signContent, $signResult,$sxfPublic);
-	//组装加密串
-	if ($verify) {
-		echo("验签成功");
-	}else{
-		echo("验签失败");
-	}
-?>

+ 0 - 61
app/phpPay/UpLoadPicture.php

@@ -1,61 +0,0 @@
-<?php
-/* *
- * 功能:支付宝手机网站alipay.trade.refund (统一收单交易退款接口)调试入口页面
- * 版本:2.0
- * 修改日期:2016-11-01
- * 说明:
- * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
- 请确保项目文件有可写权限,不然打印不了日志。
- */
-
-header("Content-type: text/html; charset=utf-8");
-
-Action_Upload();
- function Action_Upload(){
-     $furl="C:\\1.jpg";
-     $url = 'https://openapi-test.tianquetech.com/merchant/uploadPicture';
-     $res =  upload_file_to_cdn($furl, $url);
-	 
-	// echo $res;
-
-}
-
- function upload_file_to_cdn($furl,$url){
-    //  初始化
-    $ch = curl_init();
-    // 要上传的本地文件地址"@F:/xampp/php/php.ini"上传时候,上传路径前面要有@符号
-     $post_data = array (
-         //"file" =>'@D:\a.png',
-         "file" =>new CurlFile($furl),
-         'orgId'=>'26680846',  //文件类型
-         'pictureType'=>'04',
-         'reqId'=>'323ds7674354fds32fdsda60174',
-     );
-    //  设置变量
-    curl_setopt($ch, CURLOPT_URL, $url);
-    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//执行结果是否被返回,0是返回,1是不返回
-    curl_setopt($ch, CURLOPT_HEADER, 0);//参数设置,是否显示头部信息,1为显示,0为不显示
-    //伪造网页来源地址,伪造来自百度的表单提交
-    //表单数据,是正规的表单设置值为非0
-    curl_setopt($ch, CURLOPT_POST, 1);
-    curl_setopt($ch, CURLOPT_TIMEOUT, 100);//设置curl执行超时时间最大是多少
-    //使用数组提供post数据时,CURL组件大概是为了兼容@filename这种上传文件的写法,
-    //默认把content_type设为了multipart/form-data。虽然对于大多数web服务器并
-    //没有影响,但是还是有少部分服务器不兼容。本文得出的结论是,在没有需要上传文件的
-    //情况下,尽量对post提交的数据进行http_build_query,然后发送出去,能实现更好的兼容性,更小的请求数据包。
-     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
-
-     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
-
-    //   执行并获取结果
-     $data = curl_exec($ch);//运行curl
-    if($data === FALSE)
-    {
-        echo "<br/>"," cUrl Error:".curl_error($ch);
-    }
-    //  释放cURL句柄
-    curl_close($ch);
-}
-
-?>

+ 119 - 0
app/phpPay/hpay/aliLife.php

@@ -0,0 +1,119 @@
+<?php
+date_default_timezone_set('Asia/Shanghai');
+header('Content-type:text/html;charset=utf-8');
+require './class/common.php';
+require './class/AliLife.php';
+
+class Test
+{
+    // 统一下单接口
+    public function orderPay()
+    {
+        $client = new AliLife;
+        // 参数
+        $client->body = array(
+            'orderCode'   => 'Y20181204170925675836',
+            'totalAmount' => '000000000101', //代表1.01元
+            'subject'     => '1.01商品',
+            'body'        => '1.01商品',
+            'payMode'     => 'sand_alipay',
+            'payExtra'    => array(
+                'subAppid' => 'wx86466ERH8461',
+                'userId'   => 'oEl4G1XFFERHIHSXS63P-_09y',
+
+            ),
+            'clientIp'    => '127.0.0.1',
+            'notifyUrl'   => 'http://192.168.22.171/sandpay-qr-phpdemo.bak',
+            'frontUrl'    => 'http://192.168.22.171/sandpay-qr-phpdemo.bak',
+        );
+        // 返回结果
+        $ret = $client->request('orderPay');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+
+    // 订单查询
+    public function orderQuery()
+    {
+        $client = new AliLife;
+        // 参数, 每次需要重新赋值
+        $client->body = array(
+            'orderCode' => '2017091551423473', //订单号
+            'extend'    => ''
+        );
+        // 返回结果
+        $ret = $client->request('orderQuery');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+
+    // 退款申请
+    public function orderRefund()
+    {
+        $client = new AliLife;
+        // 参数
+        $client->body = array(
+            'orderCode'          => 'Y20181204170925675836', //新的订单号
+            'oriOrderCode'       => '2017091551421977', //原订单号
+            'refundAmount'       => '000000000012', //退款金额
+            'refundMarketAmount' => '000000000012', //退营销金额
+            'notifyUrl'          => 'http://192.168.22.171/sandpay-qr-phpdemo.bak/test/dist/notifyUrl.php',
+            'refundReason'       => 'test',
+            'extend'             => ''
+        );
+        // 返回结果
+        $ret = $client->request('orderRefund');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+
+    // 异步通知通用接口
+    public function notify()
+    {
+        // 实例化客户端
+        $client = new AliLife;
+
+        $sign = $_POST['sign']; //签名
+        $data = stripslashes($_POST['data']); //支付数据
+
+        // 验签
+        try {
+            $verifyFlag = $client->verify($data, $sign);
+            if (!$verifyFlag) throw new Exception('签名失败');
+        } catch (\Exception $e) {
+            exit('签名失败');
+        }
+
+        // 回调数据
+        echo '<pre>';
+        print_r($data);
+        echo '</pre>';
+    }
+
+    // 对账单申请接口
+    public function clearfileDownload()
+    {
+        // 实例化客户端
+        $client = new AliLife;
+        // 参数
+        $client->body = array(
+            'clearDate' => '20200611', // 结算日期
+            'fileType'  => '1', // 文件返回类型
+            'extend'    => ''
+        );
+        // 返回值
+        $ret = $client->request('clearfileDownload');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+}
+
+$test = new Test();
+// $test->orderPay();
+// $test->orderQuery();
+// $test->orderRefund();
+// $test->clearfileDownload();

+ 50 - 0
app/phpPay/hpay/pay/AliLife.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace app\phpPay\hpay\pay;
+
+use crmeb\services\SystemConfigService;
+
+class AliLife extends Common
+{
+    // 支付宝小程序支付:00002023
+    // 支付宝生活号支付:00002022
+    public $productId = '00002023'; //根据不同场景使用不同产品号
+
+    // 参数映射
+    protected function apiMap()
+    {
+        return array(
+            'orderPay'          => array(
+                'method' => 'sandpay.trade.pay',
+                'url'    => '/gateway/api/order/pay',
+            ),
+            'orderQuery'        => array(
+                'method' => 'sandpay.trade.query',
+                'url'    => '/gateway/api/order/query',
+            ),
+            'orderRefund'       => array(
+                'method' => 'sandpay.trade.refund',
+                'url'    => '/gateway/api/order/refund',
+            ),
+            'clearfileDownload' => array(
+                'method' => 'sandpay.trade.download',
+                'url'    => '/gateway/api/clearfile/download',
+            ),
+        );
+    }
+
+    protected function postData($method)
+    {
+        $this->publicKeyPath = SystemConfigService::get('site_url').SystemConfigService::get('public');
+        $this->privateKeyPath = SystemConfigService::get('site_url').SystemConfigService::get('private');
+
+
+        return parent::postData($method); // TODO: Change the autogenerated stub
+    }
+
+    public function request($apiName)
+    {
+        return parent::request($apiName); // TODO: Change the autogenerated stub
+    }
+
+}

+ 233 - 0
app/phpPay/hpay/pay/Common.php

@@ -0,0 +1,233 @@
+<?php
+
+namespace app\phpPay\hpay\pay;
+
+class Common
+{
+    // 商户号
+    protected $sellerMid = '6888804045113';
+    // 公钥文件
+    protected $publicKeyPath = 'cert/sand.cer';
+    // 私钥文件
+    protected $privateKeyPath = 'cert/MID_RSA_PRIVATE_KEY_100211701160001_new.pfx';
+    // 私钥证书密码
+    protected $privateKeyPwd = 'Nd123456';
+    // 接口地址
+    protected $apiUrl = 'https://cashier.sandpay.com.cn';
+    // 产品id https://open.sandpay.com.cn/product/detail/43984//
+    protected $productId = '';
+    // 接入类型  1-普通商户接入 2-平台商户接入 3-核心企业商户接入
+    protected $accessType = '1';
+    // 渠道类型  07-互联网  08-移动端
+    protected $channelType = '07';
+    // 平台ID accessType为2时必填,在担保支付模式下填写核心商户号
+    protected $plMid = '';
+    // 请求报文体
+    public $body;
+
+    /*
+    |--------------------------------------------------------------------------
+    | step1.组装参数
+    |--------------------------------------------------------------------------
+    */
+    // 参数
+    protected function postData($method)
+    {
+        $data = array(
+            'head' => array(
+                'version'     => '1.0',
+                'method'      => $method,
+                'productId'   => $this->productId,
+                'accessType'  => $this->accessType,
+                'mid'         => $this->sellerMid,
+                'plMid'       => $this->plMid,
+                'channelType' => $this->channelType,
+                'reqTime'     => date('YmdHis', time()),
+            ),
+            'body' => $this->body,
+        );
+
+        $postData = array(
+            'charset'  => 'utf-8',
+            'signType' => '01',
+            'data'     => json_encode($data),
+            'sign'     => $this->sign($data),
+        );
+
+        return $postData;
+    }
+
+    // 参数映射 继承类需要完善这个方法
+    protected function apiMap()
+    {
+        return array();
+    }
+
+    /*
+    |--------------------------------------------------------------------------
+    | step2. 请求
+    |--------------------------------------------------------------------------
+    */
+    // curl请求接口
+    public function request($apiName)
+    {
+        try {
+            $apiMap = $this->apiMap();
+            if (!isset($apiMap[$apiName])) {
+                throw new \Exception('接口名错误');
+            }
+            $postData = $this->postData($apiMap[$apiName]['method']);
+            $url      = $this->apiUrl . $apiMap[$apiName]['url'];
+
+            $ret    = $this->httpPost($url, $postData);
+            $retAry = $this->parseResult($ret); // 格式解析
+            $verify = $this->verify($retAry['data'], $retAry['sign']); // 验签
+            if (!$verify) {
+                throw new \Exception('返回数据验签失败');
+            }
+            return $retAry;
+        } catch (\Exception $e) {
+            return $e->getMessage();
+        }
+    }
+
+    // curl. 发送请求
+    protected function httpPost($url, $params)
+    {
+        if (empty($url) || empty($params)) {
+            throw new \Exception('请求参数错误');
+        }
+        $params = http_build_query($params);
+        try {
+            $ch = curl_init();
+            curl_setopt($ch, CURLOPT_URL, $url);
+            curl_setopt($ch, CURLOPT_POST, 1);
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+            $data  = curl_exec($ch);
+            $err   = curl_error($ch);
+            $errno = curl_errno($ch);
+            if ($errno) {
+                $msg = 'curl errInfo: ' . $err . ' curl errNo: ' . $errno;
+                throw new \Exception($msg);
+            }
+            curl_close($ch);
+            return $data;
+        } catch (\Exception $e) {
+            if ($ch) curl_close($ch);
+            throw $e;
+        }
+    }
+
+    // curl.解析返回数据
+    protected function parseResult($result)
+    {
+        $arr      = array();
+        $response = urldecode($result);
+        $arrStr   = explode('&', $response);
+        foreach ($arrStr as $str) {
+            $p         = strpos($str, "=");
+            $key       = substr($str, 0, $p);
+            $value     = substr($str, $p + 1);
+            $arr[$key] = $value;
+        }
+
+        return $arr;
+    }
+
+    // 表单请求接口
+    public function form($apiName)
+    {
+        $apiMap = $this->apiMap();
+        if (!isset($apiMap[$apiName])) {
+            throw new \Exception('接口名错误');
+        }
+        $postData = $this->postData($apiMap[$apiName]['method']);
+        $url      = $this->apiUrl . $apiMap[$apiName]['url'];
+
+        $form = '<form action="' . $url . '" method="post">';
+        foreach ($postData as $k => $v) {
+            $form .= "{$k} <p><input type='text' name='{$k}' value='{$v}'></p>";
+        }
+        $form .= '<input type="submit" value="提交"></form>';
+
+        return $form;
+    }
+
+    /*
+    |--------------------------------------------------------------------------
+    | step3.签名 + 验签
+    |--------------------------------------------------------------------------
+    */
+
+    // 公钥
+    private function publicKey()
+    {
+        try {
+            $file = file_get_contents($this->publicKeyPath);
+            if (!$file) {
+                throw new \Exception('getPublicKey::file_get_contents ERROR');
+            }
+            $cert   = chunk_split(base64_encode($file), 64, "\n");
+            $cert   = "-----BEGIN CERTIFICATE-----\n" . $cert . "-----END CERTIFICATE-----\n";
+            $res    = openssl_pkey_get_public($cert);
+            $detail = openssl_pkey_get_details($res);
+            openssl_free_key($res);
+            if (!$detail) {
+                throw new \Exception('getPublicKey::openssl_pkey_get_details ERROR');
+            }
+            return $detail['key'];
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    // 私钥
+    private function privateKey()
+    {
+        try {
+            $file = file_get_contents($this->privateKeyPath);
+            if (!$file) {
+                throw new \Exception('getPrivateKey::file_get_contents');
+            }
+            if (!openssl_pkcs12_read($file, $cert, $this->privateKeyPwd)) {
+                throw new \Exception('getPrivateKey::openssl_pkcs12_read ERROR');
+            }
+            return $cert['pkey'];
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    // 私钥加签
+    protected function sign($plainText)
+    {
+        $plainText = json_encode($plainText);
+        try {
+            $resource = openssl_pkey_get_private($this->privateKey());
+            $result   = openssl_sign($plainText, $sign, $resource);
+            openssl_free_key($resource);
+            if (!$result) throw new \Exception('sign error');
+            return base64_encode($sign);
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    // 公钥验签
+    public function verify($plainText, $sign)
+    {
+        $resource = openssl_pkey_get_public($this->publicKey());
+        $result   = openssl_verify($plainText, base64_decode($sign), $resource);
+        openssl_free_key($resource);
+
+        if (!$result) {
+            throw new \Exception('签名验证未通过,plainText:' . $plainText . '。sign:' . $sign);
+        }
+
+        return $result;
+    }
+}

+ 234 - 0
app/phpPay/wexin/pay/Common.php

@@ -0,0 +1,234 @@
+<?php
+namespace app\phpPay\wexin\pay;
+
+
+class Common
+{
+    // 商户号
+    protected $sellerMid = '6888804045113';
+    // 公钥文件
+    protected $publicKeyPath;
+    // 私钥文件
+    protected $privateKeyPath;
+    // 私钥证书密码
+    protected $privateKeyPwd = 'Nd123456';
+    // 接口地址
+    protected $apiUrl = 'https://cashier.sandpay.com.cn';
+    // 产品id https://open.sandpay.com.cn/product/detail/43984//
+    protected $productId = '';
+    // 接入类型  1-普通商户接入 2-平台商户接入 3-核心企业商户接入
+    protected $accessType = '1';
+    // 渠道类型  07-互联网  08-移动端
+    protected $channelType = '07';
+    // 平台ID accessType为2时必填,在担保支付模式下填写核心商户号
+    protected $plMid = '';
+    // 请求报文体
+    public $body;
+
+    /*
+    |--------------------------------------------------------------------------
+    | step1.组装参数
+    |--------------------------------------------------------------------------
+    */
+    // 参数
+    protected function postData($method)
+    {
+        $data = array(
+            'head' => array(
+                'version'     => '1.0',
+                'method'      => $method,
+                'productId'   => $this->productId,
+                'accessType'  => $this->accessType,
+                'mid'         => $this->sellerMid,
+                'plMid'       => $this->plMid,
+                'channelType' => $this->channelType,
+                'reqTime'     => date('YmdHis', time()),
+            ),
+            'body' => $this->body,
+        );
+
+        $postData = array(
+            'charset'  => 'utf-8',
+            'signType' => '01',
+            'data'     => json_encode($data),
+            'sign'     => $this->sign($data),
+        );
+
+        return $postData;
+    }
+
+    // 参数映射 继承类需要完善这个方法
+    protected function apiMap()
+    {
+        $data =1;
+        return array($data);
+    }
+
+    /*
+    |--------------------------------------------------------------------------
+    | step2. 请求
+    |--------------------------------------------------------------------------
+    */
+    // curl请求接口
+    public function request($apiName)
+    {
+        try {
+            $apiMap = $this->apiMap();
+            if (!isset($apiMap[$apiName])) {
+                throw new \Exception('接口名错误');
+            }
+            $postData = $this->postData($apiMap[$apiName]['method']);
+            $url      = $this->apiUrl . $apiMap[$apiName]['url'];
+
+            $ret    = $this->httpPost($url, $postData);
+            $retAry = $this->parseResult($ret); // 格式解析
+            $verify = $this->verify($retAry['data'], $retAry['sign']); // 验签
+            if (!$verify) {
+                throw new \Exception('返回数据验签失败');
+            }
+            return $retAry;
+        } catch (\Exception $e) {
+            return $e->getMessage();
+        }
+    }
+
+    // curl. 发送请求
+    protected function httpPost($url, $params)
+    {
+        if (empty($url) || empty($params)) {
+            throw new \Exception('请求参数错误');
+        }
+        $params = http_build_query($params);
+        try {
+            $ch = curl_init();
+            curl_setopt($ch, CURLOPT_URL, $url);
+            curl_setopt($ch, CURLOPT_POST, 1);
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+            $data  = curl_exec($ch);
+            $err   = curl_error($ch);
+            $errno = curl_errno($ch);
+            if ($errno) {
+                $msg = 'curl errInfo: ' . $err . ' curl errNo: ' . $errno;
+                throw new \Exception($msg);
+            }
+            curl_close($ch);
+            return $data;
+        } catch (\Exception $e) {
+            if ($ch) curl_close($ch);
+            throw $e;
+        }
+    }
+
+    // curl.解析返回数据
+    protected function parseResult($result)
+    {
+        $arr      = array();
+        $response = urldecode($result);
+        $arrStr   = explode('&', $response);
+        foreach ($arrStr as $str) {
+            $p         = strpos($str, "=");
+            $key       = substr($str, 0, $p);
+            $value     = substr($str, $p + 1);
+            $arr[$key] = $value;
+        }
+
+        return $arr;
+    }
+
+    // 表单请求接口
+    public function form($apiName)
+    {
+        $apiMap = $this->apiMap();
+        if (!isset($apiMap[$apiName])) {
+            throw new \Exception('接口名错误');
+        }
+        $postData = $this->postData($apiMap[$apiName]['method']);
+        $url      = $this->apiUrl . $apiMap[$apiName]['url'];
+
+        $form = '<form action="' . $url . '" method="post">';
+        foreach ($postData as $k => $v) {
+            $form .= "{$k} <p><input type='text' name='{$k}' value='{$v}'></p>";
+        }
+        $form .= '<input type="submit" value="提交"></form>';
+
+        return $form;
+    }
+
+    /*
+    |--------------------------------------------------------------------------
+    | step3.签名 + 验签
+    |--------------------------------------------------------------------------
+    */
+
+    // 公钥
+    private function publicKey()
+    {
+        try {
+            $file = file_get_contents($this->publicKeyPath);
+            if (!$file) {
+                throw new \Exception('getPublicKey::file_get_contents ERROR');
+            }
+            $cert   = chunk_split(base64_encode($file), 64, "\n");
+            $cert   = "-----BEGIN CERTIFICATE-----\n" . $cert . "-----END CERTIFICATE-----\n";
+            $res    = openssl_pkey_get_public($cert);
+            $detail = openssl_pkey_get_details($res);
+            openssl_free_key($res);
+            if (!$detail) {
+                throw new \Exception('getPublicKey::openssl_pkey_get_details ERROR');
+            }
+            return $detail['key'];
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    // 私钥
+    private function privateKey()
+    {
+        try {
+            $file = file_get_contents($this->privateKeyPath);
+            if (!$file) {
+                throw new \Exception('getPrivateKey::file_get_contents');
+            }
+            if (!openssl_pkcs12_read($file, $cert, $this->privateKeyPwd)) {
+                throw new \Exception('getPrivateKey::openssl_pkcs12_read ERROR');
+            }
+            return $cert['pkey'];
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    // 私钥加签
+    protected function sign($plainText)
+    {
+        $plainText = json_encode($plainText);
+        try {
+            $resource = openssl_pkey_get_private($this->privateKey());
+            $result   = openssl_sign($plainText, $sign, $resource);
+            openssl_free_key($resource);
+            if (!$result) throw new \Exception('sign error');
+            return base64_encode($sign);
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    // 公钥验签
+    public function verify($plainText, $sign)
+    {
+        $resource = openssl_pkey_get_public($this->publicKey());
+        $result   = openssl_verify($plainText, base64_decode($sign), $resource);
+        openssl_free_key($resource);
+
+        if (!$result) {
+            throw new \Exception('签名验证未通过,plainText:' . $plainText . '。sign:' . $sign);
+        }
+
+        return $result;
+    }
+}

+ 50 - 0
app/phpPay/wexin/pay/WechatPay.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace app\phpPay\wexin\pay;
+
+use crmeb\services\SystemConfigService;
+
+class WechatPay extends Common
+{
+    // 微信小程序支付:00002021
+    // 微信公众号支付:00002020
+    public $productId = '00002021'; //根据不同场景使用不同产品号
+
+    // 参数映射
+    protected function apiMap()
+    {
+        return array(
+            'orderPay'          => array(
+                'method' => 'sandpay.trade.pay',
+                'url'    => '/gateway/api/order/pay',
+            ),
+            'orderQuery'        => array(
+                'method' => 'sandpay.trade.query',
+                'url'    => '/gateway/api/order/query',
+            ),
+            'orderRefund'       => array(
+                'method' => 'sandpay.trade.refund',
+                'url'    => '/gateway/api/order/refund',
+            ),
+            'clearfileDownload' => array(
+                'method' => 'sandpay.trade.download',
+                'url'    => '/gateway/api/clearfile/download',
+            ),
+        );
+    }
+
+    protected function postData($method)
+    {
+        $this->publicKeyPath = SystemConfigService::get('site_url').SystemConfigService::get('public');
+        $this->privateKeyPath = SystemConfigService::get('site_url').SystemConfigService::get('private');
+
+
+        return parent::postData($method); // TODO: Change the autogenerated stub
+    }
+
+   public function request($apiName)
+   {
+
+       return parent::request($apiName); // TODO: Change the autogenerated stub
+   }
+}

+ 119 - 0
app/phpPay/wexin/wechatPay.php

@@ -0,0 +1,119 @@
+<?php
+date_default_timezone_set('Asia/Shanghai');
+header('Content-type:text/html;charset=utf-8');
+require './class/common.php';
+require './class/WechatPay.php';
+
+class Test
+{
+    // 统一下单接口
+    public function orderPay()
+    {
+        $client = new WechatPay;
+        // 参数
+        $client->body = array(
+            'orderCode'   => 'Y20181204170925675836',
+            'totalAmount' => '000000000101', //代表1.01元
+            'subject'     => '1.01商品',
+            'body'        => '1.01商品',
+            'payMode'     => 'sand_wx',
+            'payExtra'    => array(
+                'subAppid' => 'wx86466ERH8461',
+                'userId'   => 'oEl4G1XFFERHIHSXS63P-_09y',
+
+            ),
+            'clientIp'    => '127.0.0.1',
+            'notifyUrl'   => 'http://192.168.22.171/sandpay-qr-phpdemo.bak',
+            'frontUrl'    => 'http://192.168.22.171/sandpay-qr-phpdemo.bak',
+        );
+        // 返回结果
+        $ret = $client->request('orderPay');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+
+    // 订单查询
+    public function orderQuery()
+    {
+        $client = new WechatPay;
+        // 参数, 每次需要重新赋值
+        $client->body = array(
+            'orderCode' => '2017091551423473', //订单号
+            'extend'    => ''
+        );
+        // 返回结果
+        $ret = $client->request('orderQuery');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+
+    // 退款申请
+    public function orderRefund()
+    {
+        $client = new WechatPay;
+        // 参数
+        $client->body = array(
+            'orderCode'          => 'Y20181204170925675836', //新的订单号
+            'oriOrderCode'       => '2017091551421977', //原订单号
+            'refundAmount'       => '000000000012', //退款金额
+            'refundMarketAmount' => '000000000012', //退营销金额
+            'notifyUrl'          => 'http://192.168.22.171/sandpay-qr-phpdemo.bak/test/dist/notifyUrl.php',
+            'refundReason'       => 'test',
+            'extend'             => ''
+        );
+        // 返回结果
+        $ret = $client->request('orderRefund');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+
+    // 异步通知通用接口
+    public function notify()
+    {
+        // 实例化客户端
+        $client = new WechatPay;
+
+        $sign = $_POST['sign']; //签名
+        $data = stripslashes($_POST['data']); //支付数据
+
+        // 验签
+        try {
+            $verifyFlag = $client->verify($data, $sign);
+            if (!$verifyFlag) throw new Exception('签名失败');
+        } catch (\Exception $e) {
+            exit('签名失败');
+        }
+
+        // 回调数据
+        echo '<pre>';
+        print_r($data);
+        echo '</pre>';
+    }
+
+    // 对账单申请接口
+    public function clearfileDownload()
+    {
+        // 实例化客户端
+        $client = new WechatPay;
+        // 参数
+        $client->body = array(
+            'clearDate' => '20200611', // 结算日期
+            'fileType'  => '1', // 文件返回类型
+            'extend'    => ''
+        );
+        // 返回值
+        $ret = $client->request('clearfileDownload');
+        echo '<pre>';
+        print_r($ret);
+        echo '</pre>';
+    }
+}
+
+$test = new Test();
+// $test->orderPay();
+// $test->orderQuery();
+// $test->orderRefund();
+$test->clearfileDownload();

+ 1 - 0
route/api/route.php

@@ -36,6 +36,7 @@ Route::any('wechat/serve', 'wechat.WechatController/serve');//公众号服务
 Route::any('wechat/notify', 'wechat.WechatController/notify');//公众号支付回调
 Route::any('routine/notify', 'wechat.AuthController/notify');//小程序支付回调
 Route::any('alipay/notify', 'AlipayController/notify');//支付支付回调
+Route::any('sdNotify', 'AlipayController/sdNotify');//支付支付回调
 
 //管理员订单操作类
 Route::group(function () {