HuifuService.php 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695
  1. <?php
  2. namespace addons\HuifuPay\common\service;
  3. use addons\HuifuPay\common\models\HuifupayPayRequestLog;
  4. use addons\HuifuPay\common\service\params\HuifuBalancePayParam;
  5. use addons\HuifuPay\common\service\params\HuifuBalancePayRefundParam;
  6. use addons\HuifuPay\common\service\params\HuifuFastPayParam;
  7. use addons\HuifuPay\common\service\params\HuifuBalanceOnlineRefundParam;
  8. use addons\HuifuPay\common\service\params\HuifuMerchantBusiModifyParam;
  9. use BsPaySdk\core\BsPay;
  10. use BsPaySdk\core\BsPayClient;
  11. use BsPaySdk\core\BsPayTools;
  12. use BsPaySdk\request\BaseRequest;
  13. use BsPaySdk\request\V2MerchantBusiOpenRequest;
  14. use BsPaySdk\request\V2QuickbuckleApplyRequest;
  15. use BsPaySdk\request\V2QuickbuckleUnbindRequest;
  16. use BsPaySdk\request\V2TradeAcctpaymentPayRequest;
  17. use BsPaySdk\request\V2TradeAcctpaymentRefundRequest;
  18. use BsPaySdk\request\V2TradeHostingPaymentPreorderAliRequest;
  19. use BsPaySdk\request\V2TradeHostingPaymentPreorderWxRequest;
  20. use BsPaySdk\request\V2TradeOnlinepaymentTransferAccountRequest;
  21. use BsPaySdk\request\V2TradePaymentDelaytransConfirmRequest;
  22. use BsPaySdk\request\V2TradePaymentJspayRequest;
  23. use BsPaySdk\request\V2TradePaymentScanpayRefundRequest;
  24. use BsPaySdk\request\V2TradeOnlinepaymentQuickpayApplyRequest;
  25. use BsPaySdk\request\V2QuickbuckleConfirmRequest;
  26. use BsPaySdk\request\V2TradeOnlinepaymentQuickpayConfirmRequest;
  27. use BsPaySdk\request\V2TradeOnlinepaymentRefundRequest;
  28. use BsPaySdk\request\V2MerchantBusiModifyRequest;
  29. use BsPaySdk\request\V2UserBasicdataIndvRequest;
  30. use BsPaySdk\request\V2UserBusiOpenRequest;
  31. use common\enums\AddonsEnum;
  32. # 以下配置为开发联调时覆盖SDK的配置项,需在引入SDK的init.php之前配置以覆盖SDK初始配置
  33. # 设置是否调试模式,不配置默认关闭:false
  34. define("DEBUG", true);
  35. # 设置调试日志路径,不配置默认为SDK同级的log目录下
  36. //define("LOG", dirname(__FILE__) . "/log");
  37. define("LOG", \Yii::$app->basePath . '/../api/runtime/huifu');
  38. # 设置生产模式,不配置默认生产模式:true
  39. //define("PROD_MODE", false);
  40. # SDK 初始化文件加载
  41. require_once dirname(__FILE__) . "/../BsPaySdk/init.php";
  42. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2QuickbuckleApplyRequest.php";
  43. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2QuickbuckleUnbindRequest.php";
  44. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradePaymentJspayRequest.php";
  45. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeHostingPaymentPreorderWxRequest.php";
  46. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradePaymentScanpayRefundRequest.php";
  47. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeOnlinepaymentTransferAccountRequest.php";
  48. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeHostingPaymentPreorderAliRequest.php";
  49. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeAcctpaymentPayRequest.php";
  50. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeAcctpaymentRefundRequest.php";
  51. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2QuickbuckleConfirmRequest.php";
  52. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeOnlinepaymentQuickpayApplyRequest.php";
  53. require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeOnlinepaymentQuickpayConfirmRequest.php";
  54. require_once dirname(__FILE__). "/../BsPaySdk/request/V2TradeOnlinepaymentRefundRequest.php";
  55. require_once dirname(__FILE__). "/../BsPaySdk/request/V2TradePaymentDelaytransConfirmRequest.php";
  56. require_once dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiModifyRequest.php";
  57. require_once dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiOpenRequest.php";
  58. require_once dirname(__FILE__). "/../BsPaySdk/request/V2UserBusiOpenRequest.php";
  59. require_once dirname(__FILE__). "/../BsPaySdk/request/V2UserBasicdataIndvRequest.php";
  60. use common\traits\ErrorTrait;
  61. use ReflectionClass;
  62. use RuntimeException;
  63. use yii\db\Exception;
  64. use \Yii;
  65. class HuifuService
  66. {
  67. use ErrorTrait;
  68. public $public_key = '';
  69. public $config = [];
  70. public $mall_id;
  71. public $requestId;
  72. public function __construct($mall_id = null)
  73. {
  74. if (!empty($mall_id)) {
  75. $this->config = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, 'basic');
  76. # init方法,从 config.json 加载系统参数
  77. $config = [
  78. 'sys_id' => $this->config['huifupay_sys_id'],
  79. 'product_id' => $this->config['huifupay_product_id'],
  80. 'rsa_merch_private_key' => $this->config['huifupay_private_key'],
  81. 'rsa_huifu_public_key' => $this->config['huifupay_public_key'],
  82. ];
  83. $this->public_key = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($this->config['huifupay_public_key'], 64, "\n", true) . "\n-----END PUBLIC KEY-----";
  84. BsPay::init($config, true);
  85. $this->mall_id = $mall_id;
  86. }
  87. }
  88. public function verifySign($signature, $data)
  89. {
  90. return BsPayTools::verifySign_sort($signature, $data, $this->config['huifupay_public_key']);
  91. }
  92. /**
  93. * 作者:zengfanhua
  94. * 创建时间:2024/05/29 12:59:02
  95. * 大额转账要素切换
  96. * 01-四要素(卡号,户名,金额,调账标识),05-三要素(金额+姓名+12位纯数字打款标识);示例值:01
  97. */
  98. //
  99. public function merchantBusiBigPayModify($type='05')
  100. {
  101. // 2.组装请求参数
  102. $request = new V2MerchantBusiModifyRequest();
  103. // 请求流水号
  104. $request->setReqSeqId(date("YmdHis") . mt_rand());
  105. // 请求日期
  106. $request->setReqDate(date("Ymd"));
  107. // 汇付客户Id
  108. $request->setHuifuId($this->config['huifupay_huifu_id']);
  109. // 设置非必填字段
  110. $param['biz_type']=$type;
  111. $extendInfoMap = HuifuMerchantBusiModifyParam::getExtendInfosNoInfo($param);
  112. $request->setExtendInfo($extendInfoMap);
  113. // 3. 发起API调用
  114. $result = $this->postRequest($request);
  115. if (!$result || $result->isError()) { //失败处理
  116. throw new Exception($result->getErrorInfo());
  117. } else { //成功处理
  118. $resData = $result->getRspDatas();
  119. $resData = $resData['data'];
  120. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  121. return $resData;
  122. }
  123. throw new Exception($resData['resp_desc']);
  124. }
  125. }
  126. /**
  127. * 作者:zengfanhua
  128. * 创建时间:2024/01/08 12:59:02
  129. * 余额支付(这是一个同步响应操作)
  130. */
  131. public function balancePay($data, $splitAccount = [])
  132. {
  133. // 2.组装请求参数
  134. $request = new V2TradeAcctpaymentPayRequest();
  135. // 请求流水号
  136. $request->setReqSeqId(date("YmdHis") . mt_rand());
  137. // 请求日期
  138. $request->setReqDate(date("Ymd"));
  139. // 出款方商户号
  140. $request->setOutHuifuId($data['huifu_id']);
  141. // 支付金额
  142. $request->setOrdAmt($data['amount']);
  143. // 分账对象
  144. $request->setAcctSplitBunch(HuifuBalancePayParam::getAcctSplitBunch($splitAccount));
  145. // 安全信息
  146. $request->setRiskCheckData(HuifuBalancePayParam::getRiskCheckData());
  147. // 设置非必填字段
  148. $extendInfoMap = HuifuBalancePayParam::getExtendInfos();
  149. $request->setExtendInfo($extendInfoMap);
  150. // 3. 发起API调用
  151. $result = $this->postRequest($request);
  152. if (!$result || $result->isError()) { //失败处理
  153. throw new Exception($result->getErrorInfo());
  154. } else { //成功处理
  155. $resData = $result->getRspDatas();
  156. $resData = $resData['data'];
  157. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  158. return $resData;
  159. }
  160. throw new Exception($resData['resp_desc']);
  161. }
  162. }
  163. /**
  164. * 作者:zengfanhua
  165. * 创建时间:2024/01/08 12:59:02
  166. * 余额支付退款
  167. */
  168. public function balanceReturn($data, $splitAccount)
  169. {
  170. // 2.组装请求参数
  171. $request = new V2TradeAcctpaymentRefundRequest();
  172. // 请求流水号
  173. $request->setReqSeqId(date("YmdHis") . mt_rand());
  174. // 请求日期
  175. $request->setReqDate(date("Ymd"));
  176. // 商户号
  177. $request->setHuifuId($data['huifu_id']);
  178. // 原余额支付请求日期org_hf_seq_id和(orgReqDate+orgReqSeqId)二选一;&lt;br/&gt;格式:yyyyMMdd;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:20221023&lt;/font&gt;
  179. $request->setOrgReqDate($data['old_req_date']);
  180. // 原余额支付请求流水号org_hf_seq_id和(orgReqDate+orgReqSeqId)二选一;&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:2021091708126665001&lt;/font&gt;
  181. $request->setOrgReqSeqId($data['org_req_seq_id']);
  182. // 原余额支付支付全局流水号org_hf_seq_id和(orgReqDate+orgReqSeqId)二选一;&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:00470topo1A211015160805P090ac132fef00000&lt;/font&gt;
  183. $request->setOrgHfSeqId("");
  184. // 退款金额
  185. $request->setOrdAmt($data['amount']);
  186. // 设置非必填字段
  187. $extendInfoMap = HuifuBalancePayRefundParam::getExtendInfos($splitAccount);
  188. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  189. $request->setExtendInfo($extendInfoMap);
  190. // 3. 发起API调用
  191. $result = $this->postRequest($request);
  192. if (!$result || $result->isError()) { //失败处理
  193. throw new Exception($result->getErrorInfo());
  194. } else { //成功处理
  195. $resData = $result->getRspDatas();
  196. $resData = $resData['data'];
  197. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  198. return $resData;
  199. }
  200. throw new Exception($resData['resp_desc']);
  201. }
  202. }
  203. /**
  204. * 大额支付
  205. */
  206. public function bigPay($notify_url, $data)
  207. {
  208. // 2.组装请求参数
  209. $request = new V2TradeOnlinepaymentTransferAccountRequest();
  210. // 请求流水号
  211. $request->setReqSeqId(date("YmdHis") . mt_rand());
  212. // 请求日期
  213. $request->setReqDate(date("Ymd"));
  214. // 收款方商户号
  215. $request->setHuifuId($data['huifu_id']);
  216. // 交易金额
  217. $request->setTransAmt($data['amount']);
  218. // 商品描述
  219. $request->setGoodsDesc($data['goods_title']);
  220. //基本信息
  221. $extendInfoMap = array();
  222. // // 收款方用户客户号
  223. //$extendInfoMap["user_huifu_id"] = $data['huifu_id'];
  224. // // 收款方账户号
  225. // $extendInfoMap["acct_id"] = "";
  226. // 付款方名称
  227. $extendInfoMap["certificate_name"] = $data['real_name'];
  228. // 付款方银行卡号
  229. $extendInfoMap["bank_card_no"] = BsPayTools::encrypt_with_rsa_pubkey($data['bank_card_no'], $this->config['huifupay_public_key']);
  230. // 订单类型
  231. // $extendInfoMap["order_type"]= "";
  232. // 备注
  233. $extendInfoMap["remark"] = "";
  234. // 异步通知地址
  235. $extendInfoMap["notify_url"] = $notify_url;
  236. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  237. // 设置非必填字段
  238. $request->setExtendInfo($extendInfoMap);
  239. // 3. 发起API调用
  240. $result = $this->postRequest($request);
  241. if (!$result || $result->isError()) { //失败处理
  242. throw new Exception($result->getErrorInfo());
  243. } else { //成功处理
  244. $resData = $result->getRspDatas();
  245. $resData = $resData['data'];
  246. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  247. return $resData;
  248. }
  249. throw new Exception($resData['resp_desc']);
  250. }
  251. }
  252. /**
  253. * 作者:zengfanhua
  254. * 创建时间:2024/01/03 15:44:57
  255. * 线上交易退款
  256. */
  257. public function onlineRefund($data, $splitAccount = [])
  258. {
  259. // 2.组装请求参数
  260. $request = new V2TradeOnlinepaymentRefundRequest();
  261. // 请求日期
  262. $request->setReqDate(date("Ymd"));
  263. // 请求流水号
  264. $request->setReqSeqId(date("YmdHis") . mt_rand());
  265. // 商户号
  266. $request->setHuifuId($data['huifu_id']);
  267. // 退款金额
  268. $request->setOrdAmt($data['amount']);
  269. // 设备信息
  270. $request->setTerminalDeviceData(HuifuBalanceOnlineRefundParam::getTerminalDeviceData());
  271. // 安全信息
  272. $request->setRiskCheckData(HuifuBalanceOnlineRefundParam::getRiskCheckData());
  273. // 设置非必填字段
  274. $extendInfoMap = HuifuBalanceOnlineRefundParam::getExtendInfos($data,$splitAccount);
  275. $request->setExtendInfo($extendInfoMap);
  276. // 3. 发起API调用
  277. $result = $this->postRequest($request);
  278. if (!$result || $result->isError()) { //失败处理
  279. throw new Exception($result->getErrorInfo());
  280. } else { //成功处理
  281. $resData = $result->getRspDatas();
  282. $resData = $resData['data'];
  283. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  284. return $resData;
  285. }
  286. throw new Exception($resData['resp_desc']);
  287. }
  288. }
  289. /**
  290. * 作者:zengfanhua
  291. * 创建时间:2024/01/03 15:44:57
  292. * 扫码交易退款
  293. */
  294. public function refund($data, $splitAccount = [])
  295. {
  296. // 2.组装请求参数
  297. $request = new V2TradePaymentScanpayRefundRequest();
  298. // 请求日期
  299. $request->setReqDate(date("Ymd"));
  300. // 请求流水号
  301. $request->setReqSeqId(date("YmdHis") . mt_rand());
  302. // 商户号
  303. $request->setHuifuId($data['huifu_id']);
  304. // 申请退款金额
  305. $request->setOrdAmt($data['amount']);
  306. // 原交易请求日期
  307. $request->setOrgReqDate($data['old_req_date']);
  308. // 设置非必填字段
  309. $extendInfoMap = HuifuRefundParam::getExtendInfos($data['org_req_seq_id'], $splitAccount);
  310. $request->setExtendInfo($extendInfoMap);
  311. // 3. 发起API调用
  312. $result = $this->postRequest($request);
  313. if (!$result || $result->isError()) { //失败处理
  314. throw new Exception($result->getErrorInfo());
  315. } else { //成功处理
  316. $resData = $result->getRspDatas();
  317. $resData = $resData['data'];
  318. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  319. return $resData;
  320. }
  321. throw new Exception($resData['resp_desc']);
  322. }
  323. }
  324. /**
  325. * 作者:zengfanhua-支付托管
  326. * 创建时间:2023/12/30 10:27:21
  327. * 微信小程序预下单接口
  328. * @data 数据
  329. * @notify_url 通知地址
  330. * @expireDate 过期时间
  331. * @return array
  332. */
  333. public function preWxOrder($data, $notify_url, $expireDate, $splitAccount = [])
  334. {
  335. // 2.组装请求参数
  336. $request = new V2TradeHostingPaymentPreorderWxRequest();
  337. // 预下单类型
  338. $request->setPreOrderType("3");
  339. // 请求日期
  340. $request->setReqDate(date("Ymd"));
  341. // 请求流水号
  342. $request->setReqSeqId(date("YmdHis") . mt_rand());
  343. // 商户号
  344. $request->setHuifuId($data['huifu_id']);
  345. // 交易金额
  346. $request->setTransAmt($data['amount']);
  347. // 商品描述
  348. $request->setGoodsDesc($data['goods_title']);
  349. // 微信小程序扩展参数集合
  350. $request->setMiniappData(HuifuPreOrderParam::getMiniappDataRucan());
  351. // 设置非必填字段
  352. $extendInfoMap = HuifuPreOrderParam::getExtendInfos($expireDate, $notify_url, $splitAccount);
  353. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  354. $request->setExtendInfo($extendInfoMap);
  355. // 3. 发起API调用
  356. $result = $this->postRequest($request);
  357. if (!$result || $result->isError()) { //失败处理
  358. throw new Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
  359. } else { //成功处理
  360. $resData = $result->getRspDatas();
  361. $resData = $resData['data'];
  362. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  363. return $resData;
  364. }
  365. throw new Exception($resData['resp_desc']);
  366. }
  367. }
  368. /**
  369. * 支付产品
  370. * @param $data
  371. * @param $notify_url
  372. * @param $expireDate
  373. * @param $splitAccount
  374. * @return mixed
  375. * @throws Exception
  376. */
  377. public function preWxOrder2($data, $notify_url, $expireDate, $splitAccount = [])
  378. {
  379. try {
  380. // 2.组装请求参数
  381. $request = new V2TradePaymentJspayRequest();
  382. // 请求流水号
  383. $request->setReqSeqId(date("YmdHis") . mt_rand());
  384. // 请求日期
  385. $request->setReqDate(date("Ymd"));
  386. // 汇付ID
  387. $request->setHuifuId($data['huifu_id']);
  388. // 交易金额
  389. $request->setTransAmt($data['amount']);
  390. // 商品描述
  391. $request->setGoodsDesc($data['goods_title']);
  392. $request->setTradeType($data['trade_type']);
  393. // 微信参数集合
  394. $request->setWxData(HuifuJsPayParam::getWxData($data['mall_id'],$data['open_id']));
  395. // 设置非必填字段
  396. $extendInfoMap = HuifuPreOrderParam::getExtendInfos($expireDate, $notify_url, $splitAccount);
  397. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  398. $request->setExtendInfo($extendInfoMap);
  399. // 3. 发起API调用
  400. $result = $this->postRequest($request);
  401. if (!$result || $result->isError()) { //失败处理
  402. throw new Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
  403. } else { //成功处理
  404. $resData = $result->getRspDatas();
  405. $resData = $resData['data'];
  406. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  407. return $resData;
  408. }
  409. throw new Exception($resData['resp_code'].$resData['resp_desc']);
  410. }
  411. }catch (\Exception $e){
  412. throw new Exception($e->getMessage());
  413. }
  414. }
  415. /**
  416. * 作者:zengfanhua
  417. * 创建时间:2023/12/30 10:27:21
  418. * 支付宝预下单接口
  419. * @data 数据
  420. * @notify_url 通知地址
  421. * @expireDate 过期时间
  422. * @return array
  423. */
  424. public function preAliOrder($data, $notify_url, $expireDate, $splitAccount = [])
  425. {
  426. // 2.组装请求参数
  427. $request = new V2TradeHostingPaymentPreorderAliRequest();
  428. // 预下单类型
  429. $request->setPreOrderType("2");
  430. // 请求日期
  431. $request->setReqDate(date("Ymd"));
  432. // 请求流水号
  433. $request->setReqSeqId(date("YmdHis") . mt_rand());
  434. // 商户号
  435. $request->setHuifuId($data['huifu_id']);
  436. // 交易金额
  437. $request->setTransAmt($data['amount']);
  438. // 商品描述
  439. $request->setGoodsDesc($data['goods_title']);
  440. // app扩展参数集合
  441. $dto = array();
  442. // 小程序返回码
  443. $dto["app_schema"] = "app跳转链接";
  444. // 私有信息
  445. // $dto["private_info"] = "";
  446. $request->setAppData(json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
  447. // 设置非必填字段
  448. $extendInfoMap = HuifuPreOrderParam::getExtendInfos($expireDate, $notify_url, $splitAccount);
  449. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  450. $request->setExtendInfo($extendInfoMap);
  451. // 3. 发起API调用
  452. $result = $this->postRequest($request);
  453. if (!$result || $result->isError()) { //失败处理
  454. throw new Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
  455. } else { //成功处理
  456. $resData = $result->getRspDatas();
  457. $resData = $resData['data'];
  458. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  459. return $resData;
  460. }
  461. throw new Exception($resData['resp_desc']);
  462. }
  463. }
  464. /**
  465. * 作者:zengfanhua
  466. * 创建时间:2023/12/28 13:02:41
  467. * 聚合正扫接口
  468. * @data 数据
  469. * @notify_url 通知地址
  470. * @expireDate 过期时间
  471. * @wxData 微信扩展信息
  472. * @alipayData 支付宝扩展信息
  473. */
  474. public function jsPay($data, $notify_url, $expireDate, $splitAccount = [], $wxData = [], $alipayData = [])
  475. {
  476. // 2.组装请求参数
  477. $request = new V2TradePaymentJspayRequest();
  478. // 请求日期
  479. $request->setReqDate(date("Ymd"));
  480. // 请求流水号
  481. $request->setReqSeqId(date("YmdHis") . mt_rand());
  482. // 商户号
  483. $request->setHuifuId($this->config['huifu_id']);
  484. // 商品描述
  485. $request->setGoodsDesc($data['goods_title']);
  486. // 交易类型
  487. $request->setTradeType($data['trade_type']);
  488. // 交易金额
  489. $request->setTransAmt($data['amount']);
  490. // 设置非必填字段
  491. $extendInfoMap = HuifuJsPayParam::getExtendInfos($notify_url, $wxData, $alipayData, $expireDate, $splitAccount = []);
  492. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  493. $request->setExtendInfo($extendInfoMap);
  494. // 3. 发起API调用
  495. $result = $this->postRequest($request);
  496. if (!$result || $result->isError()) { //失败处理
  497. throw new Exception($result->getErrorInfo());
  498. } else { //成功处理
  499. $resData = $result->getRspDatas();
  500. $resData = $resData['data'];
  501. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  502. return $resData;
  503. }
  504. throw new Exception($resData['resp_desc']);
  505. }
  506. }
  507. /**
  508. * 作者:zengfanhua
  509. * 创建时间:2023/12/28 13:05:32
  510. * 签约银行卡
  511. * @param array data UserBankCard->id
  512. * @throws Exception
  513. * @return bool
  514. */
  515. public function signCard($data)
  516. {
  517. // 2.组装请求参数
  518. $request = new V2QuickbuckleApplyRequest;
  519. // 请求日期
  520. $request->setReqDate(date("Ymd"));
  521. // 请求流水号
  522. $request->setReqSeqId(date("YmdHis") . mt_rand());
  523. // 汇付客户Id
  524. $request->setHuifuId($data['huifu_id']);
  525. // 商户用户id
  526. $request->setOutCustId($data['user_id']);
  527. // 订单号
  528. $request->setOrderId($data['order_no']);
  529. // 订单日期
  530. $request->setOrderDate(date("Ymd"));
  531. // 银行卡号
  532. $card_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['bank_card_no'], $this->config['huifupay_public_key']);
  533. $request->setCardId($card_id_rsa);
  534. // 银行卡开户姓名
  535. $real_name_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['payer_name'], $this->config['huifupay_public_key']);
  536. $request->setCardName($real_name_rsa);
  537. // 银行卡绑定证件类型
  538. $request->setCertType("00");
  539. // 银行卡绑定身份证
  540. $user_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['id_no'], $this->config['huifupay_public_key']);
  541. $request->setCertId($user_id_rsa);
  542. // 个人证件有效期类型
  543. $request->setCertValidityType($data['is_longer'] ? "1" : '0');
  544. // 个人证件有效期起始日
  545. $request->setCertBeginDate(str_replace('-', '', $data['sdate']));
  546. // 个人证件有效期到期日长期有效不填;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:20420905&lt;/font&gt;
  547. $request->setCertEndDate($data['is_longer'] ? '' : str_replace('-', '', $data['edate']));
  548. // 银行卡绑定手机号
  549. $mobile_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['mobile_no'], $this->config['huifupay_public_key']);
  550. $request->setCardMp($mobile_rsa);
  551. // CVV2信用卡交易专用需要密文传输。&lt;br/&gt;使用汇付RSA公钥加密(加密前3位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:Ly+fnExeyPOTzfOtgRRur77nJB9TAe4PGgK9M……fc6XJXZss&#x3D;&lt;/font&gt;
  552. $request->setVipCode('');
  553. // 卡有效期信用卡交易专用,格式:MMYY,需要密文传输;&lt;br/&gt;使用汇付RSA公钥加密(加密前4位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:Ly+fnExeyPOTzfOtgRRur77nJB9TAe4PGgK9M……fc6XJXZss&#x3D;JXZss&#x3D;&lt;/font&gt;
  554. // $request->setExpiration("test");
  555. // 挂网协议编号授权信息(招行绑卡需要上送);&lt;font color&#x3D;&quot;green&quot;&gt;示例值:34463343&lt;/font&gt;
  556. // $request->setProtocolNo("test");
  557. // 设备信息域
  558. // $request->setTrxDeviceInf(getTrxDeviceInf());
  559. // 设置非必填字段
  560. $extendInfoMap = HuifuSignParam::getExtendInfos();
  561. $request->setExtendInfo($extendInfoMap);
  562. // 3. 发起API调用
  563. $result = $this->postRequest($request);
  564. if (!$result || $result->isError()) { //失败处理
  565. throw new Exception($result->getErrorInfo());
  566. } else { //成功处理
  567. $resData = $result->getRspDatas();
  568. $resData = $resData['data'];
  569. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  570. return $resData;
  571. }
  572. throw new Exception($resData['resp_desc']);
  573. }
  574. }
  575. /**
  576. * 解绑银行卡
  577. * @param $data
  578. * @return true
  579. */
  580. public function unbindBankCard($data)
  581. {
  582. try {
  583. $request = new V2QuickbuckleUnbindRequest;
  584. // 请求日期
  585. $request->setReqDate(date("Ymd"));
  586. // 请求流水号
  587. $request->setReqSeqId(date("YmdHis") . mt_rand());
  588. // 请求商户Id
  589. $request->setHuifuId($data['huifu_id']);
  590. // 商户用户id
  591. $request->setOutCustId($data['user_id']);
  592. // 银行卡号卡密
  593. $request->setTokenNo($data['sign_no']);
  594. $client = new BsPayClient();
  595. $result = $client->postRequest($request);
  596. if (!$result || $result->isError()) { //失败处理
  597. throw new Exception($result->getErrorInfo());
  598. } else { //成功处理
  599. $resData = $result->getRspDatas();
  600. $resData = $resData['data'];
  601. if ($resData['resp_code'] == '00000000' || $resData['trans_status'] == 'S') {
  602. return true;
  603. }
  604. throw new Exception($resData['resp_desc']);
  605. }
  606. } catch (\Exception $e) {
  607. Yii::$app->custom->logs('请求错误', $e->getMessage());
  608. throw new \Exception($e->getMessage());
  609. }
  610. }
  611. /**
  612. * 作者:zengfanhua
  613. * 创建时间:2023/12/28 13:05:32
  614. * 确认绑定
  615. * @param array data UserBankCard->id
  616. * @throws Exception
  617. * @return bool
  618. */
  619. public function confirmBindSms($data)
  620. {
  621. // 2.组装请求参数
  622. $request = new V2QuickbuckleConfirmRequest();
  623. // 请求日期
  624. $request->setReqDate(date("Ymd"));
  625. // 请求流水号
  626. $request->setReqSeqId(date("YmdHis") . mt_rand());
  627. // 汇付商户Id
  628. $request->setHuifuId($data['huifu_id']);
  629. // 用户id
  630. $request->setOutCustId($data['user_id']);
  631. // 订单号
  632. $request->setOrderId($data['order_no']);
  633. // 订单日期
  634. $request->setOrderDate(date("Ymd"));
  635. // 银行卡号
  636. $card_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['bank_card_no'], $this->config['huifupay_public_key']);
  637. $request->setCardId($card_id_rsa);
  638. // 银行卡开户姓名
  639. $real_name_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['payer_name'], $this->config['huifupay_public_key']);
  640. $request->setCardName($real_name_rsa);
  641. // 银行卡绑定证件类型
  642. $request->setCertType("00");
  643. // 银行卡绑定身份证
  644. $user_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['id_no'], $this->config['huifupay_public_key']);
  645. $request->setCertId($user_id_rsa);
  646. // 银行卡绑定手机号
  647. $mobile_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['mobile_no'], $this->config['huifupay_public_key']);
  648. $request->setCardMp($mobile_rsa);
  649. // 验证码
  650. $request->setVerifyCode($data['code']);
  651. // CVV2信用卡代扣专用需要密文传输,使用汇付RSA公钥加密(加密前3位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:Ly+fnExeyPOTzf……rGq0l0NTebfc6XJXZss&#x3D;&lt;/font&gt;
  652. //$request->setVipCode("BndOZvPCXIMcRJi1uCkw4DiNHht+KkARa+sbKbiLh4cXhjywxYM8GMl7g1a5cc1aD2PD6rVvnGzhhgpJ8mzeb/gbzNcYbU5hEXJZm5HShghGucQJB/SoqCIlyaWlz3hnclaGzznWJa5qNa50mCxVqX4zbpuGPWXv+8AnYTu8/Vk=");
  653. // 卡有效期信用卡代扣专用,格式:MMYY,需要密文传输。&lt;br/&gt;使用汇付RSA公钥加密(加密前4位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:Ly+fnExeyPO……ebfc6XJXZss&#x3D;&lt;/font&gt;
  654. // $request->setExpiration("test");
  655. // 设备信息域 
  656. // $request->setTrxDeviceInf(getTrxDeviceInf());
  657. // 设置非必填字段
  658. $extendInfoMap = array();
  659. // 商户名称
  660. //$extendInfoMap["merch_name"] = "测试";
  661. // 验卡流水号
  662. $extendInfoMap["trans_id"] = $data['trans_id'];
  663. // 卡的借贷类型
  664. // $extendInfoMap["dc_type"]= "";
  665. // 风控信息
  666. // $extendInfoMap["risk_info"]= getRiskInfo();
  667. $request->setExtendInfo($extendInfoMap);
  668. // 3. 发起API调用
  669. $result = $this->postRequest($request);
  670. if (!$result || $result->isError()) { //失败处理
  671. throw new Exception($result->getErrorInfo());
  672. } else { //成功处理
  673. $resData = $result->getRspDatas();
  674. $resData = $resData['data'];
  675. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  676. return $resData;
  677. }
  678. throw new Exception($resData['resp_desc']);
  679. }
  680. }
  681. /**
  682. * 作者:zengfanhua
  683. * 创建时间:2023/12/28 13:05:32
  684. * 发送快捷支付短信
  685. * @param array data UserBankCard->id
  686. * @throws Exception
  687. * @return bool
  688. */
  689. public function sendPaySms($data, $notify_url, $expireDate, $splitAccount = [])
  690. {
  691. // 2.组装请求参数
  692. $request = new V2TradeOnlinepaymentQuickpayApplyRequest();
  693. // 请求日期
  694. $request->setReqDate(date("Ymd"));
  695. // 请求流水号
  696. $request->setReqSeqId(date("YmdHis") . mt_rand());
  697. // 汇付商户Id
  698. $request->setHuifuId($data['huifu_id']);
  699. // 用户客户号
  700. $request->setUserHuifuId($data['cust_id']);
  701. // 绑卡id
  702. $request->setCardBindId($data['sign_no']);
  703. // 订单金额
  704. $request->setTransAmt($data['amount']);
  705. // 银行扩展字段
  706. $request->setExtendPayData(HuifuFastPayParam::getExtendPayData());
  707. // 安全信息
  708. $request->setRiskCheckData(HuifuFastPayParam::getRiskCheckData());
  709. // 设备数据
  710. $request->setTerminalDeviceData(HuifuFastPayParam::getTerminalDeviceData());
  711. // 异步通知地址
  712. $request->setNotifyUrl($notify_url);
  713. // 设置非必填字段
  714. $extendInfoMap = HuifuFastPayParam::getExtendInfos($splitAccount, $expireDate);
  715. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  716. $request->setExtendInfo($extendInfoMap);
  717. // 3. 发起API调用
  718. $result = $this->postRequest($request);
  719. if (!$result || $result->isError()) { //失败处理
  720. throw new Exception($result->getErrorInfo());
  721. } else { //成功处理
  722. $resData = $result->getRspDatas();
  723. $resData = $resData['data'];
  724. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  725. return $resData;
  726. }
  727. throw new Exception($resData['resp_desc']);
  728. }
  729. }
  730. /**
  731. * 作者:zengfanhua
  732. * 创建时间:2023/12/28 13:05:32
  733. * 发送快捷支付短信确认
  734. * @param array data UserBankCard->id
  735. * @throws Exception
  736. * @return bool
  737. */
  738. public function sendPaySmsConfirm($data, $notify_url)
  739. {
  740. // 2.组装请求参数
  741. $request = new V2TradeOnlinepaymentQuickpayConfirmRequest();
  742. // 请求日期
  743. $request->setReqDate(date("Ymd"));
  744. // 请求流水号
  745. $request->setReqSeqId($data['order_id']);
  746. // 商户号
  747. $request->setHuifuId($data['huifu_id']);
  748. // 短信验证码
  749. $request->setSmsCode($data['sms_code']);
  750. // 商品描述
  751. $request->setGoodsDesc($data['goods_title']);
  752. // 外部地址
  753. $request->setNotifyUrl($notify_url);
  754. $extendInfoMap = [];
  755. if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
  756. // 设置非必填字段
  757. $request->setExtendInfo($extendInfoMap);
  758. // 3. 发起API调用
  759. $result = $this->postRequest($request);
  760. if (!$result || $result->isError()) { //失败处理
  761. throw new Exception($result->getErrorInfo());
  762. } else { //成功处理
  763. $resData = $result->getRspDatas();
  764. $resData = $resData['data'];
  765. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  766. return $resData;
  767. }
  768. throw new Exception($resData['resp_desc']);
  769. }
  770. }
  771. // 单独分账
  772. public function shareCommission($data, $splitAccount)
  773. {
  774. $request = new V2TradePaymentDelaytransConfirmRequest();
  775. // 请求日期
  776. $request->setReqDate(date("Ymd"));
  777. // 请求流水号
  778. $request->setReqSeqId($data['order_id']);
  779. // 商户号
  780. $request->setHuifuId($data['huifu_id']);
  781. // 订单编号
  782. $request->setOrgMerOrdId($data['trade_no']);
  783. $extendInfoMap["acct_split_bunch"] = HuifuPreOrderParam::getAcctSplitBunchRucan($splitAccount);
  784. // 原交易为快捷支付必填:QUICK_PAY,
  785. // 原交易为余额支付必填:ACCT_PAYMENT;
  786. if (!empty($data['pay_type'])) $extendInfoMap["pay_type"] = $data['pay_type'];
  787. // $extendInfoMap['org_mer_ord_id'] = $data['trade_no'];
  788. $extendInfoMap['org_req_date'] = $data['org_req_date'];
  789. $extendInfoMap['org_req_seq_id'] = $data['org_req_seq_id'];
  790. $request->setExtendInfo($extendInfoMap);
  791. // 3. 发起API调用
  792. $result = $this->postRequest($request);
  793. if (!$result || $result->isError()) { //失败处理
  794. // throw new \Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
  795. self::$static_error = !empty($result) ? (is_string($result->getErrorInfo()) ? $result->getErrorInfo() :
  796. var_export($result->getErrorInfo(), true)) : '未获取到响应数据';
  797. return false;
  798. } else { //成功处理
  799. $resData = $result->getRspDatas();
  800. $resData = $resData['data'];
  801. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  802. return $resData;
  803. }
  804. self::$static_error = $resData;
  805. return false;
  806. // throw new \Exception($resData['resp_desc']);
  807. }
  808. }
  809. /**
  810. * @param $data
  811. * @return false|mixed
  812. * @throws Exception
  813. * @author 史晨
  814. * @date 2025/9/25 11:22
  815. * 个人用户开户
  816. */
  817. public function userIndv($data)
  818. {
  819. $request = new V2UserBasicdataIndvRequest();
  820. // 请求流水号
  821. $request->setReqSeqId(date("YmdHis") . mt_rand());
  822. // 请求日期
  823. $request->setReqDate(date("Ymd"));
  824. // 个人姓名
  825. $request->setName($data['card_name']);
  826. // 个人证件类型
  827. $request->setCertType('00');
  828. // 个人证件号码
  829. $request->setCertNo($data['cert_no']);
  830. // 个人证件有效期类型
  831. $request->setCertValidityType($data['cert_validity_type']);
  832. // 个人证件有效期开始日期
  833. $request->setCertBeginDate($data['cert_begin_date']);
  834. // 个人证件有效期截止日期
  835. $request->setCertEndDate($data['cert_end_date']);
  836. // 手机号
  837. $request->setMobileNo($data['mp']);
  838. // 发送请求
  839. $result = $this->postRequest($request);
  840. if (!$result || $result->isError()) { //失败处理
  841. throw new Exception($result->getErrorInfo());
  842. } else { //成功处理
  843. $resData = $result->getRspDatas();
  844. $resData = $resData['data'];
  845. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  846. return $resData;
  847. }
  848. return $resData['resp_desc'];
  849. }
  850. }
  851. /**
  852. * @param $data
  853. * @param $huifuId
  854. * @return mixed
  855. * @throws Exception
  856. * @author 史晨
  857. * @date 2025/9/25 15:18
  858. * 用户业务入驻
  859. */
  860. public function userBusiOpen($data,$huifuId)
  861. {
  862. $request = new V2UserBusiOpenRequest();
  863. // 汇付ID
  864. $request->setHuifuId($huifuId);
  865. // 请求流水号
  866. $request->setReqSeqId(date("YmdHis") . mt_rand());
  867. // 请求日期
  868. $request->setReqDate(date("Ymd"));
  869. // 渠道商/商户汇付Id
  870. $request->setUpperHuifuId($this->config['huifupay_huifu_id']);
  871. // 结算卡信息
  872. $request->setCardInfo(json_encode($data));
  873. $result = $this->postRequest($request);
  874. if (!$result || $result->isError()) { //失败处理
  875. throw new Exception($result->getErrorInfo());
  876. } else { //成功处理
  877. $resData = $result->getRspDatas();
  878. $resData = $resData['data'];
  879. if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
  880. return $resData;
  881. }
  882. return $resData['resp_desc'];
  883. }
  884. }
  885. /**
  886. * 发起post请求,并记录请求日志
  887. *
  888. * @param BaseRequest $request
  889. *
  890. * @return BsPay
  891. */
  892. public function postRequest($request)
  893. {
  894. $client = new BsPayClient();
  895. /** @var $result BsPay */
  896. $result = $client->postRequest($request);
  897. // 写入接口请求日志
  898. try {
  899. if (is_object($result)) {
  900. $logRes = HuifupayPayRequestLog::setData(
  901. $this->mall_id,
  902. [
  903. 'mall_id' => $this->mall_id,
  904. 'url' => $result->getUrl() ?: '',
  905. 'path' => (new ReflectionClass($request))->getShortName(),
  906. 'method' => 'post',
  907. 'request_data' => $result->getReqDatas() ?: [],
  908. 'response_data' => $result->getRspDatas() ?: '',
  909. 'http_state_code' => $result->getHttpStateCode() ?: 0,
  910. 'headers' => $result->getHttpHeaders() ?: [],
  911. 'err_msg' => $result->getErrorInfo() ?: '',
  912. ]
  913. );
  914. if (!$logRes) {
  915. throw new RuntimeException(HuifupayPayRequestLog::getStaticError());
  916. }
  917. $this->requestId = $logRes['id'];
  918. }
  919. }catch (\Exception $e) {
  920. Yii::$app->custom->logs('【汇付】记录请求日志失败', compact('result', 'request'));
  921. }
  922. return $result;
  923. }
  924. }
  925. class HuifuJsPayParam
  926. {
  927. /**
  928. * 作者:zengfanhua
  929. * 创建时间:2023/12/28 13:45:00
  930. * @return array
  931. */
  932. public static function getExtendInfos($notify_url, $wxData = [], $alipayData = [], $expireDate, $splitAccount = [])
  933. {
  934. $extendInfoMap = [];
  935. // 交易有效期
  936. $extendInfoMap["time_expire"] = date('YmdHis', $expireDate);
  937. // 聚合正扫微信拓展参数集合
  938. $extendInfoMap["wx_data"] = $wxData;
  939. // 支付宝扩展参数集合
  940. $extendInfoMap["alipay_data"] = $alipayData;
  941. // 银联参数集合
  942. // $extendInfoMap["unionpay_data"]= getUnionpayData();
  943. // 数字人民币参数集合
  944. // $extendInfoMap["dc_data"]= getDcData();
  945. // 分账对象
  946. $extendInfoMap["acct_split_bunch"] = self::getAcctSplitBunch($splitAccount);
  947. // 传入分帐遇到优惠的处理规则
  948. $extendInfoMap["term_div_coupon_type"] = "0";
  949. // 补贴支付信息
  950. // $extendInfoMap["combinedpay_data"]= getCombinedpayData();
  951. // 账户号
  952. // $extendInfoMap["acct_id"]= "";
  953. // 手续费扣款标志
  954. // $extendInfoMap["fee_flag"]= "";
  955. // 禁用信用卡标记
  956. $extendInfoMap["limit_pay_type"] = "NO_CREDIT";
  957. // 是否延迟交易
  958. $extendInfoMap["delay_acct_flag"] = "N";
  959. // 商户贴息标记
  960. $extendInfoMap["fq_mer_discount_flag"] = "N";
  961. // 渠道号
  962. $extendInfoMap["channel_no"] = "";
  963. // 场景类型
  964. $extendInfoMap["pay_scene"] = "02";
  965. // 安全信息
  966. $extendInfoMap["risk_check_data"] = self::getRiskCheckData();
  967. // 设备信息
  968. $extendInfoMap["terminal_device_data"] = self::getTerminalDeviceData();
  969. // 备注
  970. $extendInfoMap["remark"] = "String";
  971. // 异步通知地址
  972. $extendInfoMap["notify_url"] = $notify_url;
  973. return $extendInfoMap;
  974. }
  975. public static function getGoodsDetailWxRucan()
  976. {
  977. $dto = array();
  978. // 商品编码
  979. // $dto["goods_id"] = "";
  980. // 商品名称
  981. // $dto["goods_name"] = "";
  982. // 商品单价(元)
  983. // $dto["price"] = "";
  984. // 商品数量
  985. // $dto["quantity"] = "";
  986. // 微信侧商品编码
  987. // $dto["wxpay_goods_id"] = "";
  988. $dtoList = array();
  989. array_push($dtoList, $dto);
  990. return $dtoList;
  991. }
  992. public static function getDetail()
  993. {
  994. $dto = array();
  995. // 单品列表
  996. // $dto["goods_detail"] = getGoodsDetailWxRucan();
  997. // 订单原价(元)
  998. // $dto["cost_price"] = "";
  999. // 商品小票ID
  1000. // $dto["receipt_id"] = "";
  1001. return $dto;
  1002. }
  1003. public static function getStoreInfo()
  1004. {
  1005. $dto = array();
  1006. // 门店id
  1007. // $dto["id"] = "";
  1008. // 门店名称
  1009. // $dto["name"] = "";
  1010. // 门店行政区划码
  1011. // $dto["area_code"] = "";
  1012. // 门店详细地址
  1013. // $dto["ass"] = "";
  1014. $dtoList = array();
  1015. array_push($dtoList, $dto);
  1016. return $dtoList;
  1017. }
  1018. public static function getSceneInfo()
  1019. {
  1020. $dto = array();
  1021. // 门店信息
  1022. // $dto["store_info"] = getStoreInfo();
  1023. return $dto;
  1024. }
  1025. public static function getWxData($mall_id,$open_id,$extra = [])
  1026. {
  1027. $wechat_config = \Yii::$app->services->pay->getWechatConfig($mall_id);
  1028. $dto = array();
  1029. // 子商户公众账号id
  1030. $dto["sub_appid"] = $wechat_config['mini_program_app_id']??'';
  1031. // 用户标识
  1032. // $dto["openid"] = "";
  1033. // 子商户用户标识
  1034. $dto["sub_openid"] = $open_id;
  1035. // 附加数据
  1036. // $dto["attach"] = "";
  1037. // // 商品描述
  1038. // $dto["body"] = "";
  1039. // // 商品详情
  1040. // $dto["detail"] = getDetail();
  1041. // // 设备号
  1042. // $dto["device_info"] = "";
  1043. // // 订单优惠标记
  1044. // $dto["goods_tag"] = "";
  1045. // // 实名支付
  1046. // $dto["identity"] = "";
  1047. // // 开发票入口开放标识
  1048. // $dto["receipt"] = "";
  1049. // // 场景信息
  1050. // $dto["scene_info"] = getSceneInfo();
  1051. // // 终端ip
  1052. // $dto["spbill_create_ip"] = "";
  1053. // // 单品优惠标识
  1054. // $dto["promotion_flag"] = "";
  1055. // // 新增商品ID
  1056. // $dto["product_id"] = "";
  1057. // // 指定支付者
  1058. // $dto["limit_payer"] = "";
  1059. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1060. }
  1061. public static function getExtendParams()
  1062. {
  1063. $dto = array();
  1064. // 卡类型
  1065. // $dto["card_type"] = "";
  1066. // // 支付宝点餐场景类型
  1067. // $dto["food_order_type"] = "qr_order";
  1068. // // 花呗分期数
  1069. // $dto["hb_fq_num"] = "";
  1070. // // 花呗卖家承担的手续费百分比
  1071. // $dto["hb_fq_seller_percent"] = "";
  1072. // // 行业数据回流信息
  1073. // $dto["industry_reflux_info"] = "String";
  1074. // // 停车场id
  1075. // $dto["parking_id"] = "123wsx";
  1076. // // 系统商编号
  1077. // $dto["sys_service_provider_id"] = "1111111";
  1078. // 信用卡分期资产方式
  1079. // $dto["fq_channels"] = "";
  1080. return $dto;
  1081. }
  1082. public static function getGoodsDetail()
  1083. {
  1084. $dto = array();
  1085. // 商品的编号
  1086. // $dto["goods_id"] = "12312321";
  1087. // // 商品名称(元)
  1088. // $dto["goods_name"] = "阿里";
  1089. // // 商品单价
  1090. // $dto["price"] = "0.01";
  1091. // // 商品数量
  1092. // $dto["quantity"] = "20";
  1093. // // 商品描述信息
  1094. // $dto["body"] = "";
  1095. // // 商品类目树
  1096. // $dto["categories_tree"] = "String";
  1097. // // 商品类目
  1098. // $dto["goods_category"] = "";
  1099. // // 商品的展示地址
  1100. // $dto["show_url"] = "";
  1101. // $dtoList = array();
  1102. // array_push($dtoList, $dto);
  1103. return $dto;
  1104. }
  1105. public static function getExtUserInfo()
  1106. {
  1107. $dto = array();
  1108. // 姓名
  1109. // $dto["name"] = "";
  1110. // 手机号
  1111. // $dto["mobile"] = "";
  1112. // 证件类型
  1113. // $dto["cert_type"] = "";
  1114. // 证件号
  1115. // $dto["cert_no"] = "";
  1116. // 允许的最小买家年龄
  1117. // $dto["min_age"] = "";
  1118. // 是否强制校验付款人身份信息
  1119. // $dto["fix_buyer"] = "";
  1120. // 是否强制校验身份信息
  1121. // $dto["need_check_info"] = "";
  1122. return $dto;
  1123. }
  1124. public static function getAlipayData()
  1125. {
  1126. $dto = array();
  1127. // 买家的支付宝唯一用户号
  1128. $dto["buyer_id"] = "20880414938706770000";
  1129. // 支付宝的店铺编号
  1130. $dto["alipay_store_id"] = "";
  1131. // 买家支付宝账号
  1132. $dto["buyer_logon_id"] = "String";
  1133. // 业务扩展参数
  1134. $dto["extend_params"] = self::getExtendParams();
  1135. // 订单包含的商品列表信息
  1136. $dto["goods_detail"] = self::getGoodsDetail();
  1137. // 商户原始订单号
  1138. $dto["merchant_order_no"] = "String";
  1139. // 商户操作员编号
  1140. $dto["operator_id"] = "123213213";
  1141. // 销售产品码
  1142. $dto["product_code"] = "String";
  1143. // 卖家支付宝用户号
  1144. $dto["seller_id"] = "String";
  1145. // 商户门店编号
  1146. $dto["store_id"] = "";
  1147. // 外部指定买家
  1148. // $dto["ext_user_info"] = getExtUserInfo();
  1149. // 订单标题
  1150. // $dto["subject"] = "";
  1151. // 商家门店名称
  1152. // $dto["store_name"] = "";
  1153. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1154. }
  1155. public static function getPayeeInfo()
  1156. {
  1157. $dto = array();
  1158. // 商户类别
  1159. // $dto["mer_cat_code"] = "";
  1160. // 二级商户代码
  1161. // $dto["sub_id"] = "";
  1162. // 二级商户名称
  1163. // $dto["sub_name"] = "";
  1164. // 终端号
  1165. // $dto["term_id"] = "";
  1166. return $dto;
  1167. }
  1168. public static function getUnionpayData()
  1169. {
  1170. $dto = array();
  1171. // 收款方附加数据
  1172. // $dto["acq_addn_data"] = "";
  1173. // 地区信息
  1174. // $dto["area_info"] = "";
  1175. // 持卡人ip
  1176. // $dto["customer_ip"] = "";
  1177. // 前台通知地址
  1178. // $dto["front_url"] = "";
  1179. // 订单描述
  1180. // $dto["order_desc"] = "";
  1181. // 收款方附言
  1182. // $dto["payee_comments"] = "";
  1183. // 收款方信息
  1184. // $dto["payee_info"] = getPayeeInfo();
  1185. // 银联分配的服务商机构标识码
  1186. // $dto["pnr_ins_id_cd"] = "";
  1187. // 请求方自定义域
  1188. // $dto["req_reserved"] = "";
  1189. // 终端信息
  1190. // $dto["term_info"] = "";
  1191. // 云闪付用户标识
  1192. // $dto["user_id"] = "";
  1193. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1194. }
  1195. public static function getDcData()
  1196. {
  1197. $dto = array();
  1198. // 数字货币银行编号
  1199. // $dto["digital_bank_no"] = "";
  1200. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1201. }
  1202. public static function getAcctInfosRucan($splitAccount)
  1203. {
  1204. $dtoList = array();
  1205. foreach ($splitAccount as $key => $value) {
  1206. $dto = array();
  1207. // 分账金额
  1208. $dto["div_amt"] = $value['num'];
  1209. // 被分账方ID
  1210. $dto["huifu_id"] = $value['id'];
  1211. // 账户号
  1212. $dto["acct_id"] = "";
  1213. array_push($dtoList, $dto);
  1214. }
  1215. return $dtoList;
  1216. }
  1217. public static function getAcctSplitBunch($splitAccount)
  1218. {
  1219. $dto = array();
  1220. if (empty($splitAccount)) {
  1221. return $dto;
  1222. }
  1223. // 分账明细
  1224. $dto["acct_infos"] = self::getAcctInfosRucan($splitAccount);
  1225. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1226. }
  1227. public static function getCombinedpayData()
  1228. {
  1229. $dto = array();
  1230. // 补贴方汇付编号
  1231. // $dto["huifu_id"] = "test";
  1232. // 补贴方类型
  1233. // $dto["user_type"] = "test";
  1234. // 补贴方账户号
  1235. // $dto["acct_id"] = "test";
  1236. // 补贴金额
  1237. // $dto["amount"] = "test";
  1238. $dtoList = array();
  1239. array_push($dtoList, $dto);
  1240. return json_encode($dtoList, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1241. }
  1242. public static function getRiskCheckData()
  1243. {
  1244. $dto = array();
  1245. // ip地址
  1246. $dto["ip_addr"] = "180.167.105.130";
  1247. // 基站地址
  1248. $dto["base_station"] = "192.168.1.1";
  1249. // 纬度
  1250. $dto["latitude"] = "33.3";
  1251. // 经度
  1252. $dto["longitude"] = "33.3";
  1253. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1254. }
  1255. public static function getTerminalDeviceData()
  1256. {
  1257. $dto = array();
  1258. // 商户设备类型
  1259. // $dto["mer_device_type"] = "test";
  1260. // 汇付机具号
  1261. $dto["devs_id"] = "SPINTP357338300264411";
  1262. // 设备类型
  1263. $dto["device_type"] = "1";
  1264. // 交易设备IP
  1265. $dto["device_ip"] = "10.10.0.1";
  1266. // 交易设备MAC
  1267. $dto["device_mac"] = "";
  1268. // 交易设备IMEI
  1269. $dto["device_imei"] = "";
  1270. // 交易设备IMSI
  1271. $dto["device_imsi"] = "";
  1272. // 交易设备ICCID
  1273. $dto["device_icc_id"] = "";
  1274. // 交易设备WIFIMAC
  1275. $dto["device_wifi_mac"] = "";
  1276. // 交易设备GPS
  1277. $dto["device_gps"] = "192.168.0.0";
  1278. // 商户终端应用程序版本
  1279. // $dto["app_version"] = "";
  1280. // SIM 卡卡号
  1281. // $dto["icc_id"] = "";
  1282. // 商户终端实时经纬度信息
  1283. // $dto["location"] = "";
  1284. // 商户交易设备IP
  1285. // $dto["mer_device_ip"] = "";
  1286. // 移动国家代码
  1287. // $dto["mobile_country_cd"] = "";
  1288. // 移动网络号码
  1289. // $dto["mobile_net_num"] = "";
  1290. // 商户终端入网认证编号
  1291. // $dto["network_license"] = "";
  1292. // 商户终端序列号
  1293. // $dto["serial_num"] = "";
  1294. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1295. }
  1296. }
  1297. class HuifuSignParam
  1298. {
  1299. /**
  1300. * 非必填字段
  1301. *
  1302. */
  1303. public static function getExtendInfos()
  1304. {
  1305. // 设置非必填字段
  1306. $extendInfoMap = array();
  1307. // 商户名称
  1308. //$extendInfoMap["merch_name"] = "全球鹰(浙江)网络科技有限公司";
  1309. // 电子邮箱
  1310. //$extendInfoMap["email"] = "290475886@qq.com";
  1311. // 卡的借贷类型
  1312. // $extendInfoMap["dc_type"]= "";
  1313. // 风控信息
  1314. // $extendInfoMap["risk_info"]= getRiskInfo();
  1315. return $extendInfoMap;
  1316. }
  1317. }
  1318. class HuifuPreOrderParam
  1319. {
  1320. /**
  1321. * 非必填字段
  1322. *
  1323. */
  1324. public static function getExtendInfos($expireDate, $notify_url, $splitAccount)
  1325. {
  1326. // 设置非必填字段
  1327. $extendInfoMap = array();
  1328. // 收银台ID
  1329. $extendInfoMap["checkout_id"] = "";
  1330. // 是否延迟交易
  1331. $extendInfoMap["delay_acct_flag"] = "N";
  1332. // 分账对象
  1333. $extendInfoMap["acct_split_bunch"] = self::getAcctSplitBunchRucan($splitAccount);
  1334. // 交易失效时间
  1335. $extendInfoMap["time_expire"] = date('YmdHis', $expireDate);
  1336. // 业务信息
  1337. // $extendInfoMap["biz_info"]= getBizInfo();
  1338. // 交易异步通知地址
  1339. $extendInfoMap["notify_url"] = $notify_url;
  1340. return $extendInfoMap;
  1341. }
  1342. public static function getAcctInfosRucan($accountList)
  1343. {
  1344. $dtoList = array();
  1345. foreach ($accountList as $key => $value) {
  1346. $dto = array();
  1347. //分账金额
  1348. $dto["div_amt"] = $value['num'];
  1349. // 被分账方ID
  1350. $dto["huifu_id"] = $value['id'];
  1351. array_push($dtoList, $dto);
  1352. }
  1353. return $dtoList;
  1354. }
  1355. public static function getAcctSplitBunchRucan($accountList)
  1356. {
  1357. $dto = array();
  1358. if (empty($accountList)) {
  1359. return $dto;
  1360. }
  1361. // 分账明细
  1362. $dto["acct_infos"] = self::getAcctInfosRucan($accountList);
  1363. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1364. }
  1365. public static function getMiniappDataRucan()
  1366. {
  1367. $dto = array();
  1368. // 是否生成scheme_code
  1369. $dto["need_scheme"] = "N"; // 之前是Y
  1370. // 应用ID
  1371. $dto["seq_id"] = "";
  1372. // 私有信息
  1373. $dto["private_info"] = "oppsHosting://";
  1374. return $dto;
  1375. //return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1376. }
  1377. public static function getPayCheckWx()
  1378. {
  1379. $dto = array();
  1380. // 指定支付者
  1381. // $dto["limit_payer"] = "";
  1382. // 微信实名验证
  1383. // $dto["real_name_flag"] = "";
  1384. return $dto;
  1385. }
  1386. public static function getPersonPayer()
  1387. {
  1388. $dto = array();
  1389. // 姓名
  1390. // $dto["name"] = "";
  1391. // 证件类型
  1392. // $dto["cert_type"] = "";
  1393. // 证件号
  1394. // $dto["cert_no"] = "";
  1395. return $dto;
  1396. }
  1397. public function getBizInfo()
  1398. {
  1399. $dto = array();
  1400. // 付款人验证(微信)
  1401. // $dto["payer_check_wx"] = getPayCheckWx();
  1402. // 个人付款人信息
  1403. // $dto["person_payer"] = getPersonPayer();
  1404. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1405. }
  1406. }
  1407. class HuifuRefundParam
  1408. {
  1409. /**
  1410. * 非必填字段
  1411. *
  1412. */
  1413. public static function getExtendInfos($org_req_seq_id, $splitAccount = [])
  1414. {
  1415. // 设置非必填字段
  1416. $extendInfoMap = array();
  1417. // 原交易全局流水号
  1418. //$extendInfoMap["org_hf_seq_id"] = '';
  1419. // 原交易微信支付宝的商户单号
  1420. // $extendInfoMap["org_party_order_id"]= "";
  1421. // 原交易请求流水号
  1422. $extendInfoMap["org_req_seq_id"]= $org_req_seq_id;
  1423. // 分账对象
  1424. $extendInfoMap["acct_split_bunch"] = self::getAcctSplitBunchRucan($splitAccount);
  1425. // 聚合正扫微信拓展参数集合
  1426. // $extendInfoMap["wx_data"]= self::getWxData();
  1427. // 数字货币扩展参数集合
  1428. // $extendInfoMap["digital_currency_data"]= self::getDigitalCurrencyData();
  1429. // 补贴支付信息
  1430. // $extendInfoMap["combinedpay_data"]= self::getCombinedpayData();
  1431. // 备注
  1432. // $extendInfoMap["remark"]= "";
  1433. // 是否垫资退款
  1434. // $extendInfoMap["loan_flag"]= "";
  1435. // 垫资承担者
  1436. // $extendInfoMap["loan_undertaker"]= "";
  1437. // 垫资账户类型
  1438. // $extendInfoMap["loan_acct_type"]= "";
  1439. // 安全信息
  1440. // $extendInfoMap["risk_check_data"]= self::getRiskCheckData();
  1441. // 设备信息
  1442. // $extendInfoMap["terminal_device_data"]= self::getTerminalDeviceData();
  1443. // 异步通知地址
  1444. // $extendInfoMap["notify_url"]= "";
  1445. return $extendInfoMap;
  1446. }
  1447. public static function getAcctInfosRucan($splitAccount)
  1448. {
  1449. $dtoList = array();
  1450. foreach ($splitAccount as $key => $value) {
  1451. $dto = array();
  1452. // 分账金额
  1453. $dto["div_amt"] = $value['num'];
  1454. // 被分账方ID
  1455. $dto["huifu_id"] = $value['id'];
  1456. // 账户号
  1457. $dto["acct_id"] = "";
  1458. array_push($dtoList, $dto);
  1459. }
  1460. return $dtoList;
  1461. }
  1462. public static function getAcctSplitBunchRucan($splitAccount)
  1463. {
  1464. $dto = array();
  1465. if (empty($splitAccount)) {
  1466. return $dto;
  1467. }
  1468. // 分账信息列表
  1469. $dto["acct_infos"] = self::getAcctInfosRucan($splitAccount);
  1470. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1471. }
  1472. public static function getGoodsDetail()
  1473. {
  1474. $dto = array();
  1475. // 商品编码
  1476. // $dto["goods_id"] = "test";
  1477. // 优惠退款金额
  1478. // $dto["refund_amount"] = "test";
  1479. // 商品退货数量
  1480. // $dto["refund_quantity"] = "test";
  1481. // 商品单价
  1482. // $dto["price"] = "test";
  1483. $dtoList = array();
  1484. array_push($dtoList, $dto);
  1485. return $dtoList;
  1486. }
  1487. public static function getDetail()
  1488. {
  1489. $dto = array();
  1490. // 商品详情列表
  1491. // $dto["goods_detail"] = getGoodsDetail();
  1492. return $dto;
  1493. }
  1494. public static function getWxData()
  1495. {
  1496. $dto = array();
  1497. // 退款商品详情
  1498. // $dto["detail"] = getDetail();
  1499. return $dto;
  1500. }
  1501. public static function getDigitalCurrencyData()
  1502. {
  1503. $dto = array();
  1504. // 退款原因
  1505. // $dto["refund_desc"] = "";
  1506. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1507. }
  1508. public static function getCombinedpayData()
  1509. {
  1510. $dto = array();
  1511. // 补贴方汇付编号
  1512. // $dto["huifu_id"] = "test";
  1513. // 补贴方类型
  1514. // $dto["user_type"] = "test";
  1515. // 补贴方账户号
  1516. // $dto["acct_id"] = "test";
  1517. // 补贴金额
  1518. // $dto["amount"] = "test";
  1519. $dtoList = array();
  1520. array_push($dtoList, $dto);
  1521. return json_encode($dtoList, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1522. }
  1523. public static function getRiskCheckData()
  1524. {
  1525. $dto = array();
  1526. // ip地址
  1527. // $dto["ip_addr"] = "";
  1528. // 基站地址
  1529. // $dto["base_station"] = "";
  1530. // 纬度
  1531. // $dto["latitude"] = "";
  1532. // 经度
  1533. // $dto["longitude"] = "";
  1534. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1535. }
  1536. public static function getTerminalDeviceData()
  1537. {
  1538. $dto = array();
  1539. // 设备类型
  1540. // $dto["device_type"] = "";
  1541. // 交易设备IP
  1542. // $dto["device_ip"] = "";
  1543. // 交易设备MAC
  1544. // $dto["device_mac"] = "";
  1545. // 交易设备IMEI
  1546. // $dto["device_imei"] = "";
  1547. // 交易设备IMSI
  1548. // $dto["device_imsi"] = "";
  1549. // 交易设备ICCID
  1550. // $dto["device_icc_id"] = "";
  1551. // 交易设备WIFIMAC
  1552. // $dto["device_wifi_mac"] = "";
  1553. // 交易设备GPS
  1554. // $dto["device_gps"] = "";
  1555. return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  1556. }
  1557. }