Ecarddopay.php 3.7 KB

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