Card.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace app\controller\wap;
  3. use app\extra\basic\Base;
  4. use app\extra\jhfPay\Pay;
  5. use app\extra\service\system\MoneyLogService;
  6. use app\extra\tools\CodeExtend;
  7. use app\middleware\WxMiddleware;
  8. use app\model\system\SystemUserBankcard;
  9. use app\validate\saas\CardValidate;
  10. use DI\Attribute\Inject;
  11. use LinFly\Annotation\Route\Controller;
  12. use LinFly\Annotation\Route\Middleware;
  13. use LinFly\Annotation\Route\Route;
  14. use support\Request;
  15. use support\Response;
  16. #[Controller(prefix: "/wap/card"),Middleware(WxMiddleware::class)]
  17. class Card extends Base
  18. {
  19. #[Inject]
  20. protected SystemUserBankcard $model;
  21. #[Inject]
  22. protected MoneyLogService $service;
  23. #[Inject]
  24. protected CardValidate $validate;
  25. #[Route(path: "list",methods: "get")]
  26. public function getCardList(Request $request): Response
  27. {
  28. try {
  29. $param = $request->get();
  30. $data = $this->model->where("agent_id",$request->user['shop_id'])->findOrEmpty();
  31. if ($data->isEmpty())
  32. {
  33. $data = null;
  34. } else {
  35. $data['logo'] = "https://apimg.alipay.com/combo.png?d=cashier&t={$data['bank']}";
  36. $data['user_name_hide'] = hide_str($data['user_name'],1);
  37. $data['card_id_hide'] = hide_str($data['card_id'],3,10);
  38. }
  39. $city = json_decode(file_get_contents(public_path()."/city.json"),true);
  40. if (empty($param['shop'])) {
  41. $param['shop'] = $request->user['shop_id'];
  42. }
  43. $list = $this->service->getList($param);
  44. $list = pageFormat($list);
  45. return success("ok",compact("data",'city','list'));
  46. } catch (\Throwable $throwable) {
  47. return error($throwable->getMessage());
  48. }
  49. }
  50. /**
  51. * 新增银行卡
  52. * @param Request $request
  53. * @return Response
  54. */
  55. #[Route(path: "save",methods: "post")]
  56. public function setUserCard(Request $request): Response
  57. {
  58. try {
  59. $param = $request->post();
  60. $card = $this->model->where("agent_id",$request->user['shop_id'])->findOrEmpty();
  61. if (!$card->isEmpty()) return error("请勿重复添加");
  62. if ($param['type'] == 2) {
  63. $memberId = $this->model->where("member_id",$param['data_id'])->field("member_id,user_name,cert_id,tel_no,bank,card_id,valid_from,valid_until,card_prov_code,card_area_code,card_city_name")->findOrEmpty();
  64. if ($memberId->isEmpty()) return errorTrans("empty.data");
  65. $memberId['agent_id'] = $request->user['shop_id'];
  66. $state = $card->strict(false)->insertGetId($memberId->toArray());
  67. } else {
  68. if (empty($param['card_city'])) return error("请选择开户地区");
  69. $param['card_prov_code'] = $param['card_city'][0];
  70. $param['card_area_code'] = $param['card_city'][1];
  71. $param['card_city'] = json_encode($param['card_city']);
  72. $resp = $this->validate->scene("add")->check($param);
  73. if (!$resp) return error($this->validate->getError());
  74. $bankAli = json_decode(file_get_contents("https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo={$param['card_id']}&cardBinCheck=true"),true);
  75. if (!$bankAli['validated']) return error("银行卡号有误");
  76. if ($param['valid_from'] >= $param['valid_until']) return error("身份证有效期有误");
  77. $param['bank'] = $bankAli['bank'];
  78. $param['agent_id'] = $request->user['shop_id'];
  79. $param['member_id'] = CodeExtend::random(18);
  80. $respJhf = (new Pay)->config([
  81. "appid" => sConf("wechat.jhf_appid"),
  82. "mch_id" => sConf("wechat.jhf_mch_id"),
  83. "aeskey" => sConf("wechat.jhf_aeskey"),
  84. "pubkey" => sConf("wechat.jhf_pubkey"),
  85. "prikey" => sConf("wechat.jhf_prikey"),
  86. ])->createMember([
  87. "app_id" => sConf("wechat.jhf_appid"),
  88. "member_id" => $param['member_id'],
  89. "member_type" => "01",
  90. "member_p" => [
  91. "user_name" => $param['user_name'],
  92. "cert_id" => $param['cert_id'],
  93. "tel_no" => $param['tel_no'],
  94. "card_id" => $param['card_id'],
  95. "valid_from" => $param['valid_from'],
  96. "valid_until" => ($param['valid_until']=='20990101')?"99991231":$param['valid_until'],
  97. "card_prov_code" => $param['card_prov_code'],
  98. "card_area_code" => $param['card_area_code']
  99. ]
  100. ]);
  101. if (isset($respJhf['code'])) return error($respJhf['error_msg']);
  102. // 推送绑定
  103. $state = $card->strict(false)->insertGetId($param);
  104. }
  105. if (!$state) return errorTrans("error.data");
  106. return successTrans("success.data");
  107. } catch (\Throwable $throwable) {
  108. return error($throwable->getMessage());
  109. }
  110. }
  111. }