Infodopay.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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\allwin\controller\api\v4;
  9. use app\allwin\controller\api\Base;
  10. use app\allwin\model\AllwinInfo;
  11. use app\allwin\model\AllwinInfoOrder;
  12. use app\allwin\model\MchId;
  13. use app\common\facade\WechatPay;
  14. use app\allwin\model\AllwinConfig;
  15. use filter\Filter;
  16. class Infodopay 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. $param['signkey'] = $this->request->param('signkey');
  36. $param['sign'] = $this->request->param('sign');
  37. $sign = $this->apiSign($param);
  38. if($sign['code'] != 200){
  39. return enjson($sign['code'],'签名验证失败');
  40. }
  41. $param['fields'] = json_encode(Filter::filter_escape(json_decode($param['fields'],true)));
  42. //判断是否已下架
  43. $item = AllwinInfo::where(['member_miniapp_id' => $this->miniapp_id,'id' => $param['id'],'is_lock' => 0])->find();
  44. if(empty($item)){
  45. return enjson(403,'信息不存在');
  46. }
  47. //读取订单
  48. $order_no = $this->user->invite_code.order_no();
  49. $amount = $item->price;
  50. //唤醒微信支付参数
  51. $payparm = [
  52. 'openid' => $this->user->miniapp_uid,
  53. 'miniapp_id' => $this->miniapp_id,
  54. 'name' => $item->mp->title,
  55. 'order_no' => $order_no,
  56. 'total_fee' => $amount <= 0 ? 1 : $amount*100,
  57. 'notify_url' => api(4,'allwin/infonotify/order',$this->miniapp_id),
  58. ];
  59. //读取配置
  60. $setting = AllwinConfig::getConfig($this->miniapp_id);
  61. if($setting->is_psp == 1){
  62. $default_mchid = MchId::getMch(0, $this->miniapp_id); //默认收款账户
  63. if(empty($default_mchid)) {
  64. return enjson(403,'未找到商户号');
  65. }
  66. $payparm['mchid'] = $default_mchid->mchid;
  67. }
  68. $ispay = WechatPay::orderPay($payparm);
  69. if ($ispay['code'] == 0) {
  70. return enjson(403,$ispay['msg']);
  71. }
  72. //判断是否新订单
  73. $param['member_miniapp_id'] = $this->miniapp_id;
  74. $param['uid'] = $this->user->id;
  75. $param['info_uid'] = $item->user_id;
  76. $param['info_id'] = $item->id;
  77. $param['phone'] = $param['telphone'];
  78. $param['amount'] = $amount;
  79. $param['order_no'] = $order_no;
  80. $param['message'] = $param['message'];
  81. $param['fields'] = $param['fields'];
  82. $param['cache'] = $item->toJson();
  83. $rel = AllwinInfoOrder::insertOrder($param,$order_no);
  84. if(empty($rel)){
  85. return enjson(204,'购买商品失败');
  86. }
  87. return enjson(200,'成功',$ispay['data']);
  88. }
  89. }
  90. /**
  91. * 我的订单
  92. * @return void
  93. */
  94. public function order(){
  95. $param['active'] = $this->request->param('active/d',0);
  96. $param['page'] = $this->request->param('page/d',1);
  97. $param['signkey'] = $this->request->param('signkey');
  98. $param['sign'] = $this->request->param('sign');
  99. $rel = $this->apiSign($param);
  100. if($rel['code'] != 200){
  101. return enjson($rel['code'],'签名验证失败');
  102. }
  103. $condition['uid'] = $this->user->id;
  104. $condition['is_del'] = 0;
  105. switch ($param['active']) {
  106. case 1:
  107. $condition['paid_at'] = 0;
  108. break;
  109. case 2:
  110. $condition['paid_at'] = 1;
  111. $condition['status'] = 0;
  112. break;
  113. case 3:
  114. $condition['paid_at'] = 1;
  115. $condition['status'] = 1;
  116. break;
  117. }
  118. $lists = AllwinInfoOrder::where($condition)->field('cache',true)->order('id desc')->paginate(10)->toArray();
  119. $data = [];
  120. foreach ($lists['data'] as $key => $value) {
  121. $data[$key] = $value;
  122. $data[$key]['fields'] = json_decode($value['fields'],true);
  123. }
  124. return enjson(200,'成功',$data);
  125. }
  126. }