Agentdopay.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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\AllwinUserAgent;
  11. use app\allwin\model\AllwinConfig;
  12. use app\common\model\SystemMemberForm;
  13. use app\common\facade\WechatPay;
  14. class Agentdopay extends Base{
  15. /**
  16. * 初始化当前应用是否登录
  17. * @return void
  18. */
  19. public function initialize() {
  20. parent::initialize();
  21. if(!$this->user){
  22. exit(json_encode(['code'=>404,'msg'=>'用户认证失败']));
  23. }
  24. }
  25. /**
  26. * 开通社群主
  27. */
  28. public function agent(){
  29. if (request()->isPost()) {
  30. $data = [
  31. 'member_miniapp_id' => $this->miniapp_id,
  32. 'uid' => $this->user->id,
  33. 'order_no' => $this->request->param('order_no/s'),
  34. ];
  35. $validate = $this->validate($data, 'Dopay.agent');
  36. if (true !== $validate) {
  37. return enjson(403,$validate);
  38. }
  39. $order = AllwinUserAgent::where(['member_miniapp_id' => $this->miniapp_id,'uid' => $this->user->id,'pay_state' => 1])->find();
  40. if($order){
  41. return enjson(403,'请不要重复开通社群主');
  42. }
  43. $setting = AllwinConfig::getConfig($this->miniapp_id);
  44. $order_no = empty($data['order_no']) ? 'AGENT'.order_no() :$data['order_no'];
  45. if(empty($setting->agent_on_amount)){
  46. $data['pay_state'] = 2;
  47. $rel = AllwinUserAgent::insertOrder($data,$order_no);
  48. if($rel){
  49. return enjson(200,'成功');
  50. }else{
  51. return enjson(204,'开通社群主失败');
  52. }
  53. }
  54. //唤醒微信支付参数
  55. $payparm = [
  56. 'openid' => $this->user->miniapp_uid,
  57. 'miniapp_id' => $this->miniapp_id,
  58. 'name' => '社群主开通',
  59. 'order_no' => $order_no,
  60. 'total_fee' => empty($data['order_no']) ? $setting->agent_on_amount * 100 : $order->price * 100,
  61. 'notify_url' => api(1,'allwin/agentNotify/agent',$this->miniapp_id),
  62. ];
  63. //读取配置
  64. $setting = model('AllwinConfig')->getConfig($this->miniapp_id);
  65. if($setting->is_psp == 1){
  66. $default_mchid = model('MchId')->getMch(0, $this->miniapp_id); //默认收款账户
  67. if (empty($default_mchid)) {
  68. return enjson(403,'未找到商户号');
  69. }
  70. $payparm['mchid'] = $default_mchid->mchid;
  71. }
  72. $ispay = WechatPay::orderPay($payparm);
  73. if ($ispay['code'] == 0) {
  74. return enjson(403,$ispay['msg']);
  75. }
  76. //创建记录
  77. $data['price'] = $setting->agent_on_amount;
  78. empty($data['order_no']) ?: $rel = AllwinUserAgent::insertOrder($data,$order_no);
  79. if($rel){
  80. //把支付packageID添加到数据库
  81. $package = $ispay['data']['package'];
  82. SystemMemberForm::addForm($this->miniapp_id,$this->user->id,substr($package,10));
  83. return enjson(200,'成功',$ispay['data']);
  84. }else{
  85. return enjson(204,'开通社群主失败');
  86. }
  87. }
  88. }
  89. }