Account.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php namespace Place\Lib;
  2. use Dever;
  3. class Account
  4. {
  5. # 下单操作
  6. public function pay($order)
  7. {
  8. $account = Dever::input('platform', 'is_string', '账户', 'weixin');
  9. $env = Dever::input('env', 'is_numeric', '运行环境', 3);
  10. $result = $this->openid(['key' => $account], $env, $order['uid']);
  11. if (isset($result['link'])) {
  12. return $result;
  13. }
  14. $account = $this->getInfo(['key' => 'pay_' . $account]);
  15. if (!$account) {
  16. Dever::error('支付账户配置错误');
  17. }
  18. $cert = Dever::db('place/account_cert')->find(['account_id' => $account['id'], 'platform_cert_id' => 2]);
  19. if (!$cert || ($cert && $cert['edate'] <= time())) {
  20. Dever::load(\Api\Lib\Account::class)->run($account, 'task', [], 1, 'run', 'place');
  21. }
  22. $param = [];
  23. $param['order_num'] = $order['order_num'];
  24. $param['openid'] = $result['openid'];
  25. $param['name'] = $order['name'];
  26. $param['notify'] = $order['notify'];
  27. $param['cash'] = $order['pay_money_cash']*100;
  28. $param['time_expire'] = time() + 4000;
  29. return Dever::load(\Api\Lib\Account::class)->run($account, 'order', $param, $env, 'run', 'place');
  30. }
  31. # 退款操作
  32. public function refund($order, $pay_cash, $refund_order_num, $sector_id, $place_id, $type)
  33. {
  34. $account = $order['env_platform'];
  35. $env = $order['env_type'];
  36. $account = $this->getInfo(['key' => 'pay_' . $account]);
  37. if (!$account) {
  38. Dever::error('支付账户配置错误');
  39. }
  40. $param['order_num'] = $order['order_num'];
  41. $param['refund_order_num'] = $refund_order_num;
  42. $param['total'] = $order['pay_money_cash']*100;
  43. $param['cash'] = $pay_cash*100;
  44. $param['notify'] = 'Porder/Lib/Notify.refund|' . $sector_id . '|' . $place_id . '|' . $type . '|' . $refund_order_num;
  45. return Dever::load(\Api\Lib\Account::class)->run($account, 'refund', $param, 1, 'run', 'place');
  46. }
  47. # 微信小程序发货操作
  48. public function delivery($order, $detail, $data, $mode = 1, $delivered = true)
  49. {
  50. if ($order['env_platform'] == 'weixin' && $order['env_type'] == 5) {
  51. $token = Dever::load(\Api\Lib\Util::class)->token($order['env_platform'], $order['env_type'], 'place');
  52. if (!$token) {
  53. Dever::error('无法发货');
  54. }
  55. # 虚拟商品
  56. $method = 3;
  57. if ($data && isset($order['method'])) {
  58. if ($order['method'] == 3) {
  59. # 自提
  60. $method = 4;
  61. } elseif ($detail['source_type'] == 1) {
  62. # 快递
  63. $method = 1;
  64. }
  65. }
  66. $goods = $detail['name'];
  67. $delivery = [];
  68. if ($method == 1) {
  69. $address = Dever::db('puser/address')->find($order['address_id']);
  70. $contact = '';
  71. if ($address) {
  72. $contact = ['receiver_contact' => \Dever\Helper\Str::hide($address['phone'])];
  73. }
  74. foreach ($data as $v) {
  75. $content = explode(',', $v['content']);
  76. $code = $v['code'];
  77. foreach ($content as $v1) {
  78. $delivery[] = [
  79. 'tracking_no' => $v1,
  80. 'express_company' => $code,
  81. 'item_desc' => $goods,
  82. 'contact' => $contact,
  83. ];
  84. }
  85. }
  86. } else {
  87. $delivery[] = [
  88. 'item_desc' => $goods,
  89. ];
  90. }
  91. $result = $this->openid(['key' => $order['env_platform']], $order['env_type'], $order['uid']);
  92. if (!$result['openid']) {
  93. return;
  94. }
  95. $account = $this->getInfo(['key' => $order['env_platform']]);
  96. if (!$account) {
  97. Dever::error('账户配置错误');
  98. }
  99. $param = [];
  100. $param['access_token'] = $token;
  101. $param['order_num'] = $order['order_num'];
  102. $param['logistics_type'] = $method;
  103. $param['delivery'] = $delivery;
  104. $param['mode'] = $mode;
  105. $param['delivered'] = $delivered;
  106. $param['time'] = time();
  107. $param['openid'] = $result['openid'];
  108. return Dever::load(\Api\Lib\Account::class)->run($account, 'delivery', $param, 1, 'run', 'place');
  109. }
  110. }
  111. # 获取openid
  112. public function openid($account, $env, $uid, $result = [])
  113. {
  114. $account = $this->getInfo($account);
  115. return Dever::load(\Api\Lib\Util::class)->openid($account, $env, $uid, $result, 'place');
  116. }
  117. # 获取小程序码
  118. # version = develop/release/trial
  119. public function getAppletCode($account, $env, $scene, $page, $version = 'develop')
  120. {
  121. $token = Dever::load(\Api\Lib\Util::class)->token($account, $env, 'place');
  122. if ($token) {
  123. $param['access_token'] = $token;
  124. $param['scene'] = $scene;
  125. $param['page'] = $page;
  126. $param['env_version'] = $version;
  127. $data = Dever::load(\Api\Lib\Account::class)->run($account, 'applet_code', $param, 1, 'run', 'place');
  128. return $data;
  129. }
  130. }
  131. # 获取账户信息
  132. public function getInfo($where)
  133. {
  134. $info = Dever::db('place/account')->find($where);
  135. if ($info) {
  136. $account = Dever::db('api/account')->find(['key' => $info['key']]);
  137. $info['app_id'] = $account['app_id'];
  138. $info['platform_id'] = $account['platform_id'];
  139. $info['desc'] = $account['desc'];
  140. return $info;
  141. }
  142. }
  143. }