FastPayController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <?php
  2. namespace addons\JoinPay\api\modules\v1\controllers;
  3. use addons\JoinPay\common\global_func\payment_logic\JoinPayFastPay;
  4. use addons\JoinPay\common\models\JoinPayUserBankcard;
  5. use common\enums\AddonsEnum;
  6. use common\enums\ApiStatusEnum;
  7. use common\enums\StatusEnum;
  8. use common\helpers\ArrayHelper;
  9. use common\models\common\UserBankCard;
  10. class FastPayController extends BaseController
  11. {
  12. public $modelClass = '';
  13. /**
  14. * 不用进行登录验证的方法
  15. *
  16. * 例如: ['index', 'update', 'create', 'view', 'delete']
  17. * 默认全部需要验证
  18. *
  19. * @var array
  20. */
  21. protected $authOptional = [];
  22. /**
  23. * @name:
  24. * @msg: 添加银行卡并签约接口,提交订单页面添加并签约银行卡
  25. * @param {*}
  26. * @return {*}
  27. */
  28. public function actionAddCardAndSign()
  29. {
  30. if (!\Yii::$app->request->isPost) {
  31. return $this->error('请求方式错误');
  32. }
  33. $post = \Yii::$app->request->post();
  34. //'bank_code', 'card_type', 'card_type_name' 这三个参数由后端处理,前端不提交该参数
  35. $rules = [
  36. [['id_type', 'bank_card_no', 'id_no', 'payer_name', 'mobile_no'], 'required'],
  37. ['id_type', 'integer'],
  38. ['id_type', 'default', 'value' => 1],
  39. ['bank_card_no', 'string', 'max' => 64],
  40. [['id_no', 'payer_name', 'bank_name'], 'string', 'max' => 255],
  41. [['mobile_no', 'bank_code', 'card_type', 'card_type_name'], 'string', 'max' => 32],
  42. ];
  43. $res = \Yii::$app->services->validate->validate($post, $rules);
  44. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  45. $validate_card = UserBankCard::validateCardInfo($post['bank_card_no'],$post['bank_name']);
  46. $post = array_merge($post,$validate_card);
  47. $model = UserBankCard::findOne(['bank_card_no' => $post['bank_card_no'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  48. if (empty($model)) {
  49. $user_bank_card_data = [
  50. 'user_id' => $this->user_id,
  51. 'bank_card_no' => $post['bank_card_no'],
  52. 'payer_name' => $post['payer_name'],
  53. 'bank_name' => $post['bank_name'],
  54. 'bank_code' => $post['bank_code'],
  55. 'card_type' => $post['card_type'],
  56. 'card_type_name' => $post['card_type_name'],
  57. ];
  58. $model = UserBankCard::setData($this->mall_id, $user_bank_card_data);
  59. if (false === $model) return $this->error(UserBankCard::getStaticError());
  60. }
  61. $post['user_id'] = $this->user_id;
  62. $post['card_id'] = $model->id;
  63. $resj = JoinPayUserBankcard::setData($this->mall_id, $post);
  64. if (false === $resj) return $this->error(JoinPayUserBankcard::getStaticError());
  65. try {
  66. //调用汇聚接口:发送签约短信
  67. $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  68. // dd($settings);
  69. $fast_pay_class = new JoinPayFastPay($settings);
  70. $fast_pay_class->sendSignSms($model->id);
  71. return $this->success('操作成功', ['card_id' => $model->id]);
  72. } catch (\Exception $e) {
  73. return $this->error($e->getMessage());
  74. }
  75. }
  76. /**
  77. * @name:
  78. * @msg: 去签约接口,会员中心银行卡列表页面
  79. * @param {*}
  80. * @return {*}
  81. */
  82. public function actionToSign()
  83. {
  84. if (!\Yii::$app->request->isPost) {
  85. return $this->error('请求方式错误');
  86. }
  87. $post = \Yii::$app->request->post();
  88. $rules = [
  89. [['card_id', 'id_type', 'id_no', 'mobile_no'], 'required'],
  90. [['card_id', 'id_type'], 'integer'],
  91. ['id_type', 'default', 'value' => 1],
  92. ['id_no', 'string', 'max' => 255],
  93. ['mobile_no', 'string', 'max' => 32],
  94. ];
  95. $res = \Yii::$app->services->validate->validate($post, $rules);
  96. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  97. $card_info = UserBankCard::find()
  98. ->select('user_id,payer_name,bank_name,bank_code,bank_card_no,card_type,card_type_name')
  99. ->where(['mall_id' => $this->mall_id, 'id' => $post['card_id'], 'status' => StatusEnum::ENABLED])
  100. ->asArray()
  101. ->limit(1)
  102. ->one();
  103. if (empty($card_info)) {
  104. return $this->error('银行卡不存在');
  105. }
  106. $model = JoinPayUserBankCard::setData($this->mall_id, array_merge($post, $card_info));
  107. if (false === $model) return $this->error(JoinPayUserBankCard::getStaticError());
  108. try {
  109. // 签约快捷支付
  110. $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  111. $fast_pay_class = new JoinPayFastPay($settings);
  112. $fast_pay_class->sendSignSms($model->card_id);
  113. return $this->success('操作成功', ['card_id' => $model->card_id]);
  114. } catch (\Exception $e) {
  115. return $this->error($e->getMessage());
  116. }
  117. }
  118. /**
  119. * @name:
  120. * @msg: 签约
  121. * @param {*}
  122. * @return {*}
  123. */
  124. public function actionSignContract()
  125. {
  126. if (!\Yii::$app->request->isPost) {
  127. return $this->error('请求方式错误');
  128. }
  129. $post = \Yii::$app->request->post();
  130. $rules = [
  131. [['card_id', 'sms_code'], 'required'],
  132. [['card_id'], 'integer'],
  133. ['sms_code', 'string'],
  134. ];
  135. $res = \Yii::$app->services->validate->validate($post, $rules);
  136. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  137. $card_info = UserBankCard::findOne([
  138. 'mall_id' => $this->mall_id,
  139. 'status' => StatusEnum::ENABLED,
  140. 'id' => $post['card_id'],
  141. 'user_id' => $this->user_id,
  142. ]);
  143. if (empty($card_info)) return $this->error('银行卡不存在');
  144. $joinpay_card_info = JoinPayUserBankcard::findOne([
  145. 'mall_id' => $this->mall_id,
  146. 'status' => StatusEnum::ENABLED,
  147. 'card_id' => $post['card_id'],
  148. 'user_id' => $this->user_id,
  149. ]);
  150. if (empty($joinpay_card_info)) {
  151. return $this->error('银行卡数据异常');
  152. }
  153. if ($joinpay_card_info->is_sign == 1) {
  154. return $this->error('银行卡已经签约');
  155. }
  156. try {
  157. // 签约快捷支付
  158. $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  159. $fast_pay_class = new JoinPayFastPay($settings);
  160. $fast_pay_class->sign($post['card_id'], $post['sms_code']);
  161. $card_info = ArrayHelper::toArray($card_info);
  162. $card_info['is_sign'] = 1;
  163. $card_info['is_auth'] = true;
  164. $card_info['icon'] = UserBankCard::getBankPicture($card_info['bank_code'], 'icon');
  165. unset($card_info['cvv'], $card_info['sign_no'], $card_info['payer_name'], $card_info['id_no']);
  166. return $this->success('签约成功', ['card_info' => $card_info], ApiStatusEnum::CODE_SUCCESS, 0);
  167. } catch (\Exception $e) {
  168. return $this->error($e->getMessage());
  169. }
  170. }
  171. /**
  172. * @name:
  173. * @msg: 解除快捷支付签约
  174. * @param {*}
  175. * @return {*}
  176. */
  177. public function actionContractRelieve()
  178. {
  179. if (!\Yii::$app->request->isPost) {
  180. return $this->error('请求方式错误');
  181. }
  182. $post = \Yii::$app->request->post();
  183. $rules = [
  184. [['card_id'], 'required'],
  185. [['card_id'], 'integer'],
  186. ];
  187. $res = \Yii::$app->services->validate->validate($post, $rules);
  188. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  189. $card_info = UserBankCard::findOne([
  190. 'mall_id' => $this->mall_id,
  191. 'id' => $post['card_id'],
  192. 'status' => StatusEnum::ENABLED,
  193. 'user_id' => $this->user_id,
  194. ]);
  195. $joinpay_card_info = JoinPayUserBankcard::findOne([
  196. 'mall_id' => $this->mall_id,
  197. 'user_id' => $this->user_id,
  198. 'card_id' => $post['card_id'],
  199. 'status' => StatusEnum::ENABLED,
  200. 'is_sign' => 1,
  201. ]);
  202. if (empty($card_info) || empty($joinpay_card_info)) {
  203. return $this->error('银行卡不存在或者已经解除签约');
  204. };
  205. try {
  206. // 解除快捷支付签约
  207. $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  208. $fast_pay_class = new JoinPayFastPay($settings);
  209. $fast_pay_class->unsign($joinpay_card_info);
  210. return $this->success('解约成功');
  211. } catch (\Exception $e) {
  212. return $this->error($e->getMessage());
  213. }
  214. }
  215. /**
  216. * @name:
  217. * @msg: 发送快捷支付支付短信
  218. * @param {*}
  219. * @return {*}
  220. */
  221. public function actionPaySms()
  222. {
  223. if (!\Yii::$app->request->isPost) {
  224. return $this->error('请求方式错误');
  225. }
  226. $post = \Yii::$app->request->post();
  227. $rules = [
  228. [['card_id', 'trade_id'], 'required'],
  229. [['card_id', 'trade_id'], 'integer'],
  230. ];
  231. $res = \Yii::$app->services->validate->validate($post, $rules);
  232. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  233. // $card_info = UserBankCard::findOne([
  234. // 'mall_id' => $this->mall_id,
  235. // 'id' => $post['card_id'],
  236. // 'user_id' => $this->user_id,
  237. // 'status' => StatusEnum::ENABLED,
  238. // ]);
  239. $joinpay_card_info = JoinPayUserBankcard::findOne([
  240. 'mall_id' => $this->mall_id,
  241. 'user_id' => $this->user_id,
  242. 'card_id' => $post['card_id'],
  243. 'status' => StatusEnum::ENABLED,
  244. 'is_sign' => 1,
  245. ]);
  246. if ( empty($joinpay_card_info)) throw new \Exception('银行卡不存在或者未开通快捷支付');
  247. try {
  248. // 发送快捷支付短信
  249. $settings = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  250. $fast_pay_class = new JoinPayFastPay($settings);
  251. $fast_pay_class->sendPaySms($post['trade_id'], $joinpay_card_info, $this->mall_id);
  252. return $this->success('短信发送成功');
  253. } catch (\Exception $e) {
  254. return $this->error($e->getMessage());
  255. }
  256. }
  257. }