Infopay.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 支付接口
  7. */
  8. namespace app\ais\controller\api\v1;
  9. use app\ais\controller\api\Base;
  10. use app\ais\model\AisInfo;
  11. use app\ais\model\AisInfoOrder;
  12. use app\ais\model\MchId;
  13. use app\ais\model\AisConfig;
  14. use app\common\facade\WechatPay;
  15. use filter\Filter;
  16. class Infopay extends Base{
  17. /**
  18. * 初始化当前应用是否登录
  19. * @return void
  20. */
  21. public function initialize() {
  22. parent::initialize();
  23. $this->isUserAuth();
  24. }
  25. /**
  26. * 购买商品
  27. */
  28. public function index(){
  29. if (request()->isPost()) {
  30. $param['id'] = $this->request->param('id/d');
  31. $param['telphone'] = $this->request->param('telphone/s','');
  32. $param['message'] = $this->request->param('message','');
  33. $param['ucode'] = $this->request->param('ucode','');
  34. $param['fields'] = $this->request->param('fields/s','[]','htmlspecialchars_decode');
  35. $this->apiSign($param);
  36. $param['fields'] = json_encode(Filter::filter_escape(json_decode($param['fields'],true)));
  37. //判断是否已下架
  38. $item = AisInfo::where(['member_miniapp_id' => $this->miniapp_id,'id' => $param['id'],'is_lock' => 0])->find();
  39. if(empty($item)){
  40. return enjson(403,'信息不存在');
  41. }
  42. //读取订单
  43. $order_no = order_no($this->user->invite_code);
  44. $amount = $item->price;
  45. //唤醒微信支付参数
  46. $payparm = [
  47. 'openid' => $this->user->miniapp_uid,
  48. 'miniapp_id' => $this->miniapp_id,
  49. 'name' => $item->mp->title,
  50. 'order_no' => $order_no,
  51. 'total_fee' => $amount <= 0 ? 1 : $amount * 100,
  52. 'notify_url' => api(1,'ais/notify/infoOrder',$this->miniapp_id),
  53. ];
  54. //读取配置
  55. if($this->member_miniapp->is_psp){
  56. $setting = AisConfig::getConfig($this->miniapp_id);
  57. if (empty($setting->mchid)) {
  58. return enjson(403,'服务商模式下,必须配置默认商户号');
  59. }
  60. $payparm['mchid'] = $setting->mchid;
  61. }
  62. $ispay = WechatPay::orderPay($payparm);
  63. if ($ispay['code'] == 0) {
  64. return enjson(403,$ispay['msg']);
  65. }
  66. //判断是否新订单
  67. $param['member_miniapp_id'] = $this->miniapp_id;
  68. $param['uid'] = $this->user->id;
  69. $param['info_uid'] = $item->uid;
  70. $param['info_id'] = $item->id;
  71. $param['phone'] = $param['telphone'];
  72. $param['amount'] = $amount;
  73. $param['order_no'] = $order_no;
  74. $param['message'] = $param['message'];
  75. $param['fields'] = $param['fields'];
  76. $param['cache'] = $item->toJson();
  77. $rel = AisInfoOrder::insertOrder($param,$order_no);
  78. if(empty($rel)){
  79. return enjson(204,'购买商品失败');
  80. }
  81. return enjson(200,'成功',$ispay['data']);
  82. }
  83. }
  84. /**
  85. * 我的订单
  86. * @return void
  87. */
  88. public function order(){
  89. $param['active'] = $this->request->param('active/d',0);
  90. $param['page'] = $this->request->param('page/d',1);
  91. $this->apiSign($param);
  92. $condition['uid'] = $this->user->id;
  93. $condition['is_del'] = 0;
  94. switch ($param['active']) {
  95. case 1:
  96. $condition['paid_at'] = 0;
  97. break;
  98. case 2:
  99. $condition['paid_at'] = 1;
  100. $condition['status'] = 0;
  101. break;
  102. case 3:
  103. $condition['paid_at'] = 1;
  104. $condition['status'] = 1;
  105. break;
  106. }
  107. $lists = AisInfoOrder::where($condition)->field('cache',true)->order('id desc')->paginate(10)->toArray();
  108. $data = [];
  109. foreach ($lists['data'] as $key => $value) {
  110. $data[$key] = $value;
  111. $data[$key]['fields'] = json_decode($value['fields'],true);
  112. }
  113. return enjson(200,'成功',$data);
  114. }
  115. }