OrderController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * OrderController.php UTF-8
  4. * 订单处理
  5. *
  6. * @date : 2018/1/16 16:52
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace api\sdk\controller\v8;
  13. use api\common\controller\V2ApiBaseController;
  14. use huo\controller\member\MemCache;
  15. use huo\controller\pay\Notify;
  16. use huo\controller\pay\PaySwitch;
  17. use huo\controller\pay\Sdk;
  18. use huo\model\member\MemGameModel;
  19. use huo\model\order\PayAppleModel;
  20. use huoIdentify\controller\Pay;
  21. use huolib\constant\GameConst;
  22. use huolib\constant\MemConst;
  23. use huolib\constant\OrderConst;
  24. use huolib\status\MemberStatus;
  25. use huolib\status\OrderStatus;
  26. use think\Exception;
  27. class OrderController extends V2ApiBaseController {
  28. public function _initialize() {
  29. parent::_initialize();
  30. }
  31. /**
  32. * 游戏预下单
  33. * http://doc.1tsdk.com/138?page_id=2908
  34. * 【域名】/v8/sdk/preorder
  35. * 【域名】/v8/pay/preorder
  36. */
  37. public function preorder() {
  38. $this->checkLogin();
  39. $_game_rq = $this->setGameData();
  40. $_channel_rq = $this->setChannelData();
  41. $_device_rq = $this->setDeviceData();
  42. $_mem_rq = $this->setMemData();
  43. $_role_rq = $this->setRoleData();
  44. $_order_rq = $this->setOrderData();
  45. $_mem_data = MemCache::ins()->getInfoById($this->mem_id);
  46. if (isset($_mem_data['status']) && $_mem_data['status'] == MemConst::STATUS_FORBID) {
  47. $_code = MemberStatus::LOGIN_IS_OUT;
  48. $this->error(lang(MemberStatus::getMsg($_code)), [], $_code);
  49. }
  50. /* Modified by chenbingling BEGIN 2020/9/15 ISSUES:#13181 马甲包使用马甲包预下单 */
  51. $_vb_id = $_game_rq->getVbId();
  52. if (!empty($_vb_id)) {
  53. $_rs = (new \huosdk\h5ios\core\controller\Order())->preorder(
  54. $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq
  55. );
  56. $this->returnData($_rs);
  57. }
  58. /* END 2020/9/15 ISSUES:#13181 */
  59. $_mem_game_info = (new MemGameModel())->getInfoByAppMemId($_game_rq->getHAppId(), $this->mem_id);
  60. $_agent_id = $_mem_game_info['guided_agent_id'] ?? 0;
  61. if (empty($_agent_id)) {
  62. $_agent_id = $_mem_data['agent_id'] ?? 0;
  63. }
  64. $_mem_rq->setAgentId($_agent_id);
  65. $_channel_rq->setAgentId($_agent_id);
  66. $_order = new Sdk();
  67. $_pay_check = OrderConst::PAY_SWITCH_NO;
  68. /* 判断支付切换 */
  69. $_from = $_device_rq->getFrom();
  70. if (GameConst::GAME_IOS_SWITCH == $_from) {
  71. $_pay_check = (new PaySwitch())->getPaySwitch(
  72. $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq
  73. );
  74. }
  75. $_preorder_rs = $_order->preorder($_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq);
  76. if (OrderStatus::NO_ERROR != $_preorder_rs['code']) {
  77. $this->returnData($_preorder_rs);
  78. }
  79. $_order_data = $_preorder_rs['data'];
  80. $_order_id = $_order_data['order_id'];
  81. $_pay_token = $_order_rq->genPayToken($_order_id);
  82. $_rdata['order_id'] = $_order_id;
  83. $_rdata['pay_token'] = $_pay_token;
  84. $_rdata['check'] = $_pay_check;
  85. $_rdata['pay_url'] = ''; //TODO: chengbingling 2018/6/5 切换支付url
  86. /* 支付限制校验 */
  87. $_rs = (new Pay())->checkLimit($this->mem_id, $_game_rq->getHAppId(), $_order_data['amount']);
  88. if (is_array($_rs)) {
  89. $this->returnData($_rs);
  90. }
  91. $_rdata['url'] = $_rs;
  92. /* 苹果下单 直接插入苹果订单表 */
  93. $_from = $_device_rq->getFrom();
  94. if (GameConst::GAME_IOS_SWITCH == $_from && OrderConst::PAY_SWITCH_NO == $_pay_check) {
  95. $_data['order_id'] = $_order_id;
  96. $_data['mem_id'] = $_mem_rq->getMemId();
  97. $_data['mg_mem_id'] = $_mem_rq->getMgMemId();
  98. $_data['apple_id'] = $_game_rq->getAppleId();
  99. $_data['product_id'] = $_order_rq->getProductId();
  100. $_data['idfv'] = $_device_rq->getMac();
  101. $_data['idfa'] = $_device_rq->getDeviceId();
  102. (new PayAppleModel())->addData($_data);
  103. }
  104. $this->success(lang('SUCCESS'), $_rdata);
  105. }
  106. /**
  107. * 支付页面数据
  108. * http://doc.1tsdk.com/138?page_id=2954
  109. * 【域名】/pay/info
  110. * 【域名】/v8/pay/info
  111. */
  112. public function getInfo() {
  113. $this->checkLogin();
  114. $_order_rq = $this->setOrderData();
  115. $_pay_token = get_val($this->rq_data, 'pay_token', '');
  116. $_rs = $_order_rq->checkPayToken($_pay_token);
  117. if (false == $_rs) {
  118. $_code = OrderStatus::TOKEN_ARGS_ERROR;
  119. $this->error(OrderStatus::getMsg($_code), [], $_code);
  120. }
  121. $_order_id = $_order_rq->getOrderId();
  122. $_rdata = (new Sdk())->getPayInfo($_order_id);
  123. $this->returnData($_rdata);
  124. }
  125. /**
  126. * 查询支付结果
  127. * http://doc.1tsdk.com/138?page_id=2909
  128. * 【域名】/v8/product/query
  129. */
  130. public function read() {
  131. try {
  132. $_order_rq = $this->setOrderData();
  133. $_order = new Sdk();
  134. $_rdata = $_order->getStatus($_order_rq->getOrderId());
  135. if (false == $_rdata) {
  136. $this->error('ERROR');
  137. }
  138. if (OrderConst::CP_STATUS_SUC != $_rdata['cp_status'] && OrderConst::PAY_STATUS_SUC == $_rdata['status']) {
  139. $_rs = (new Notify())->notify($_order_rq->getOrderId());
  140. if (OrderStatus::NO_ERROR == $_rs['code']) {
  141. $_rdata['status'] = OrderConst::PAY_STATUS_SUC;
  142. $_rdata['cp_status'] = OrderConst::CP_STATUS_SUC;
  143. }
  144. }
  145. $_rdata['order_id'] = $_order_rq->getOrderId();
  146. $this->success(lang('SUCCESS'), $_rdata);
  147. } catch (Exception $_e) {
  148. $this->error($_e->getMessage());
  149. }
  150. }
  151. }