Appserver.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. <?php
  2. /*
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\services\helper;
  10. use fecshop\services\Service;
  11. use Yii;
  12. /**
  13. * 该类主要是给appserver端的api,返回的数据做格式输出,规范输出的各种状态。
  14. * @author Terry Zhao <2358269014@qq.com>
  15. * @since 1.0
  16. */
  17. class Appserver extends Service
  18. {
  19. /**
  20. * 公共状态码
  21. */
  22. public $status_success = 200;
  23. public $status_unknown = 1000000; // 程序内部错误:未知错误
  24. public $status_mysql_disconnect = 1000001; // 程序内部错误:mysql连接错误
  25. public $status_mongodb_disconnect = 1000002; // 程序内部错误:mongodb连接错误
  26. public $status_redis_disconnect = 1000003; // 程序内部错误:redis连接错误
  27. public $status_invalid_token = 1000004; // 无效数据:token无效
  28. public $status_invalid_request_url = 1000005; // 无效请求:该url不存在
  29. public $status_invalid_email = 1000006; // 格式错误:邮箱格式无效
  30. public $status_invalid_captcha = 1000007; // 无效数据:验证码错误
  31. public $status_invalid_param = 1000008; // 无效参数
  32. public $status_miss_param = 1000009; // 参数丢失
  33. public $status_limit_beyond = 1000010; // 超出限制
  34. public $status_data_repeat = 1000011; // 数据重复
  35. public $status_attack = 1000012; // 确定为攻击返回的状态
  36. public $status_invalid_code = 1000013; // 程序内部错误:传递的无效code
  37. /**
  38. * 用户部分的状态码
  39. */
  40. public $account_register_email_exist = 1100000; // 注册:邮箱已经存在
  41. public $account_register_invalid_data = 1100001; // 注册:注册数据格式不正确
  42. public $account_login_invalid_email_or_password = 1100002; // 登录:账户的邮箱或者密码不正确
  43. public $account_no_login_or_login_token_timeout = 1100003; // 登录:账户的token已经过期,或者没有登录
  44. public $account_edit_invalid_data = 1100004; // 编辑:账户的编辑数据不正确
  45. public $account_contact_us_send_email_fail = 1100005; // contact:发送邮件失败
  46. public $account_is_logined = 1100006; // 登录:用户已经登录
  47. public $account_register_fail = 1100007; // 注册:失败
  48. public $account_email_not_exist = 1100008; // 账户中该email不存在
  49. public $account_forget_password_token_timeout = 1100009; // 忘记密码:token超时
  50. public $account_forget_password_reset_param_invalid = 1100010; // 忘记密码:通过邮件重置密码,传递的参数缺失或不正确
  51. public $account_forget_password_reset_fail = 1100011; // 忘记密码:重置密码失败
  52. public $account_address_is_not_exist = 1100012; // customer address:address id 不存在
  53. public $account_address_edit_param_invaild = 1100013; // customer address:address 编辑传入的param存在问题,无效
  54. public $account_reorder_order_id_invalid = 1100014; // customer order:reorder 传入的order_id 无效
  55. public $account_favorite_id_not_exist = 1100015; // custome favorite: favorite id is not exit
  56. public $account_facebook_login_error = 1100016; // 使用fb账户登录fecshop出错
  57. public $account_google_login_error = 1100017; // 使用google账户登录fecshop出错
  58. public $account_address_save_fail = 1100018;
  59. public $account_register_disable = 1100019; // 注册后,账户disable,需要邮件激活
  60. public $account_register_resend_email_success = 1100020; // 登录:账户的邮箱或者密码不正确
  61. public $account_register_send_email_fail = 1100021; // 注册后,账户disable,需要邮件激活
  62. public $account_register_enable_token_invalid = 1100022;
  63. public $account_wx_get_user_info_fail = 1100023; // 基于code,请求微信获取用户信息失败
  64. public $account_wx_user_login_fail = 1100024; // wx登陆失败
  65. public $account_wx_get_customer_by_openid_fail = 1100025; // 通过openid 查找customer
  66. public $no_account_openid_and_session_key = 1100026; // session中找不到 account_openid and session_key
  67. public $account_has_account_openid = 1100027; // openid 已经有存在的账户了
  68. public $account_login_and_get_access_token_fail = 1100028; // 登陆账户获取access_token失败
  69. public $account_register_email_exit = 1100029; // 注册:邮箱已经存在
  70. public $account_address_set_default_fail = 1100030; // 用户设置默认地址失败
  71. /**
  72. * category状态码
  73. */
  74. public $category_not_exist = 1200000; // 分类:分类不存在
  75. /**
  76. * product状态码
  77. */
  78. public $product_favorite_fail = 1300000; // 产品:产品收藏失败
  79. public $product_not_active = 1300001; // 产品:已经下架
  80. public $product_id_not_exist = 1300002; // 产品:产品不存在
  81. public $product_save_review_fail = 1300003; // 产品:产品保存评论失败
  82. /**
  83. * cart
  84. */
  85. public $cart_product_add_fail = 1400001; // Cart:产品加入购物车失败
  86. public $cart_product_add_param_invaild = 1400002; // Cart:产品加入购物车传递参数无效
  87. public $cart_product_update_qty_fail = 1400003; // Cart:更改cart中product的个数失败
  88. public $cart_coupon_invalid = 1400004; // Cart:coupon不可用
  89. public $cart_product_select_fail = 1400005; // Cart:product 勾选出错
  90. /**
  91. * order
  92. */
  93. public $order_generate_product_stock_out = 1500001; // Order: 下订单,产品库存不足。
  94. public $order_generate_fail = 1500002; // Order: 下订单,生成订单失败。
  95. public $order_paypal_express_get_token_fail = 1500003; // Order: 通过paypal express方式支付,获取token失败
  96. public $order_generate_request_post_param_invaild = 1500004; // Order: 下订单,必填的订单字段验证失败。
  97. public $order_generate_create_account_fail = 1500005; // Order: 下订单,游客在下订单的同时直接生成账户失败。
  98. public $order_generate_save_address_fail = 1500006; // Order: 下订单,游客在下订单的同时保存address信息失败。
  99. public $order_generate_cart_product_empty = 1500007; // Order: 下订单,购物车数据为空
  100. public $order_shipping_country_empty = 1500008; // Order: 下订单页面,切换address,从customer address中无法获取country
  101. public $order_paypal_standard_get_token_fail = 1500009; // Order: 通过paypal standard方式支付,获取token失败
  102. public $order_paypal_standard_payment_fail = 1500010; // Order: 通过paypal standard方式支付,通过api支付失败
  103. public $order_paypal_standard_updateorderinfoafterpayment_fail = 1500011; // Order: 通过paypal standard方式支付,api支付订单成功后,更新订单信息失败
  104. public $order_not_find_increment_id_from_dbsession = 1500012; // order:无法从dbsession中获取order increment id
  105. public $order_paypal_express_payment_fail = 1500013; // Order: 通过paypal express方式支付,通过api支付失败
  106. public $order_paypal_express_updateorderinfoafterpayment_fail = 1500014; // Order: 通过paypal express方式支付,api支付订单成功后,更新订单信息失败
  107. public $order_paypal_express_get_PayerID_fail = 1500015; // Order: 通过paypal express方式支付,获取PayerID失败
  108. public $order_paypal_express_get_apiAddress_fail = 1500016; // Order: 通过paypal express方式支付,获取address失败
  109. public $order_has_been_paid = 1500017; // Order: 下订单,订单已经被支付过
  110. public $order_not_exist = 1500018; // Order: 下订单,订单不存在
  111. public $order_alipay_payment_fail = 1500019; // Order: 下订单,支付宝支付订单失败
  112. public $order_payment_paypal_express_error = 1500020;
  113. public $order_wxpay_payment_fail = 1500021;
  114. /**
  115. * cms
  116. */
  117. public $cms_article_not_exist = 1600001; // Article: 文章不存在
  118. /**
  119. * 跨域访问cors
  120. */
  121. public $appserver_cors;
  122. /**
  123. * 用于vue端跨域访问的cors设置
  124. * @return array
  125. */
  126. public function getCors(){
  127. $cors_allow_headers = $this->getCorsAllowHeaders();
  128. $cors = $this->appserver_cors;
  129. $corsFilterArr = [];
  130. if (is_array($cors) && !empty($cors)) {
  131. if (isset($cors['Origin']) && $cors['Origin']) {
  132. $corsFilterArr['Origin'] = $cors['Origin'];
  133. }
  134. if (isset($cors['Access-Control-Request-Method']) && $cors['Access-Control-Request-Method']) {
  135. $corsFilterArr['Access-Control-Request-Method'] = $cors['Access-Control-Request-Method'];
  136. }
  137. if (isset($cors['Access-Control-Max-Age']) && $cors['Access-Control-Max-Age']) {
  138. $corsFilterArr['Access-Control-Max-Age'] = $cors['Access-Control-Max-Age'];
  139. }
  140. if (isset($cors['Access-Control-Allow-Headers']) && is_array($cors['Access-Control-Allow-Headers'])) {
  141. $cors_allow_headers = array_merge($cors_allow_headers, $cors['Access-Control-Allow-Headers']);
  142. $corsFilterArr['Access-Control-Request-Headers'] = $cors_allow_headers;
  143. $corsFilterArr['Access-Control-Expose-Headers'] = $cors_allow_headers;
  144. }
  145. $corsFilterArr['Access-Control-Allow-Credentials'] = true;
  146. }
  147. return $corsFilterArr;
  148. }
  149. public function getCorsAllowHeaders() {
  150. $fecshop_uuid = Yii::$service->session->fecshop_uuid;
  151. return ['Origin', 'X-Requested-With', 'Content-Type', 'Accept', $fecshop_uuid, 'fecshop-lang', 'fecshop-currency', 'access-token'];
  152. }
  153. /**
  154. * 用于vue端跨域访问的 customer token auth 的 cors设置
  155. * @return array
  156. */
  157. public function getYiiAuthCors(){
  158. $cors_allow_headers = $this->getCorsAllowHeaders();
  159. $cors = $this->appserver_cors;
  160. $corsFilterArr = [];
  161. if (is_array($cors) && !empty($cors)) {
  162. if (isset($cors['Origin']) && $cors['Origin']) {
  163. $corsFilterArr[] = 'Access-Control-Allow-Origin: ' . implode(', ', $cors['Origin']);
  164. }
  165. if (isset($cors['Access-Control-Allow-Headers']) && is_array($cors['Access-Control-Allow-Headers'])) {
  166. $cors_allow_headers = array_merge($cors_allow_headers, $cors['Access-Control-Allow-Headers']);
  167. }
  168. $corsFilterArr[] = 'Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, ' . implode(', ', $cors_allow_headers);
  169. if (isset($cors['Access-Control-Allow-Methods']) && is_array($cors['Access-Control-Allow-Methods'])) {
  170. $corsFilterArr[] = 'Access-Control-Allow-Methods: ' . implode(', ',$cors['Access-Control-Allow-Methods']);
  171. }
  172. $corsFilterArr[] = 'Access-Control-Allow-Credentials: true';
  173. }
  174. return $corsFilterArr;
  175. }
  176. /**
  177. * @param int $code 状态码
  178. * @param mixed $data 可以是数字,数组等格式,用于做返回给前端的数组。
  179. * @param string $message 选填,如果不填写,则使用函数返回的内容作为 message
  180. * @return array
  181. */
  182. public function getResponseData($code, $data, $message = '')
  183. {
  184. if (!$message) {
  185. $message = $this->getMessageByCode($code);
  186. }
  187. if ($message) {
  188. return [
  189. 'code' => $code,
  190. 'message' => $message,
  191. 'data' => $data,
  192. ];
  193. } else {
  194. // 如果不存在,则说明系统内部调用不存在的 code,报错。
  195. $code = $this->status_invalid_code;
  196. $message = $this->getMessageByCode($code);
  197. return [
  198. 'code' => $code,
  199. 'message' => $message,
  200. 'data' => '',
  201. ];
  202. }
  203. }
  204. /**
  205. * 得到 code 对应 message
  206. * @param int $code 状态码
  207. * @return string|array
  208. */
  209. public function getMessageByCode($code)
  210. {
  211. $messageArr = $this->getMessageArr();
  212. return isset($messageArr[$code]['message']) ? $messageArr[$code]['message'] : '';
  213. }
  214. /**
  215. * 得到 code 对应 message的数组
  216. */
  217. public function getMessageArr()
  218. {
  219. $arr = [
  220. /**
  221. * 公共状态码
  222. */
  223. $this->status_success => [
  224. 'message' => 'process success',
  225. ],
  226. $this->status_unknown => [
  227. 'message' => 'unknown errors',
  228. ],
  229. $this->status_mysql_disconnect => [
  230. 'message' => 'mysql connect timeout',
  231. ],
  232. $this->status_mongodb_disconnect => [
  233. 'message' => 'mongodb connect timeout',
  234. ],
  235. $this->status_redis_disconnect => [
  236. 'message' => 'redis connect timeout',
  237. ],
  238. $this->status_invalid_token => [
  239. 'message' => 'token is timeout or invalid',
  240. ],
  241. $this->status_invalid_request_url => [
  242. 'message' => 'the request url is not exist',
  243. ],
  244. $this->status_invalid_email => [
  245. 'message' => 'email format is not correct',
  246. ],
  247. $this->status_invalid_captcha => [
  248. 'message' => 'captcha is not correct',
  249. ],
  250. $this->status_invalid_param => [
  251. 'message' => 'incorrect request parameter',
  252. ],
  253. $this->status_invalid_code => [
  254. 'message' => 'system error, invalid code',
  255. ],
  256. $this->status_miss_param => [
  257. 'message' => 'required parameter does not exist',
  258. ],
  259. $this->status_limit_beyond => [
  260. 'message' => 'beyond maximum limit',
  261. ],
  262. $this->status_data_repeat => [
  263. 'message' => 'insert data is repeat',
  264. ],
  265. $this->status_attack => [
  266. 'message' => 'access exception, the visit to determine the attack behavior',
  267. ],
  268. /**
  269. * 用户部分的状态码
  270. */
  271. $this->account_no_login_or_login_token_timeout => [
  272. 'message' => 'account not login or token timeout',
  273. ],
  274. $this->account_register_email_exist => [
  275. 'message' => 'account register email is exist',
  276. ],
  277. $this->account_register_invalid_data => [
  278. 'message' => 'account register data is invalid',
  279. ],
  280. $this->account_login_invalid_email_or_password => [
  281. 'message' => 'account login email or password is not correct',
  282. ],
  283. $this->account_edit_invalid_data => [
  284. 'message' => 'account edit data is invalid',
  285. ],
  286. $this->account_contact_us_send_email_fail => [
  287. 'message' => 'customer contact us send email fail',
  288. ],
  289. $this->account_is_logined => [
  290. 'message' => 'account is logined',
  291. ],
  292. $this->account_register_fail => [
  293. 'message' => 'account register fail',
  294. ],
  295. $this->account_email_not_exist => [
  296. 'message' => 'account email not exist',
  297. ],
  298. $this->account_forget_password_token_timeout => [
  299. 'message' => 'account forget password token timeout',
  300. ],
  301. $this->account_forget_password_reset_param_invalid => [
  302. 'message' => 'account forget password reset param invalid',
  303. ],
  304. $this->account_forget_password_reset_fail => [
  305. 'message' => 'account forget password reset fail',
  306. ],
  307. $this->account_address_is_not_exist => [
  308. 'message' => 'account address id is not exist',
  309. ],
  310. $this->account_address_save_fail => [
  311. 'message' => 'account address save fail',
  312. ],
  313. $this->account_register_disable => [
  314. 'message' => 'account register is disable',
  315. ],
  316. $this->account_register_resend_email_success => [
  317. 'message' => 'account register resend email success',
  318. ],
  319. $this->account_register_send_email_fail => [
  320. 'message' => 'account_register_send_email_fail',
  321. ],
  322. $this->account_register_enable_token_invalid => [
  323. 'message' => 'account_register_enable_token_invalid',
  324. ],
  325. $this->account_wx_get_user_info_fail => [
  326. 'message' => 'use wxCode to get user info fail',
  327. ],
  328. $this->account_wx_user_login_fail => [
  329. 'message' => 'wx user login account fail',
  330. ],
  331. $this->account_wx_get_customer_by_openid_fail => [
  332. 'message' => 'you should bind wx openid with one account',
  333. ],
  334. $this->no_account_openid_and_session_key => [
  335. 'message' => 'no_account_openid_and_session_key',
  336. ],
  337. $this->account_has_account_openid => [
  338. 'message' => 'account_has_account_openid',
  339. ],
  340. $this->account_login_and_get_access_token_fail => [
  341. 'message' => 'account_login_and_get_access_token_fail',
  342. ],
  343. $this->account_register_email_exit => [
  344. 'message' => 'account_register_email_exit',
  345. ],
  346. $this->account_address_set_default_fail => [
  347. 'message' => 'account_address_set_default_fail',
  348. ],
  349. $this->account_address_edit_param_invaild => [
  350. 'message' => 'account address edit param is invalid',
  351. ],
  352. $this->account_reorder_order_id_invalid => [
  353. 'message' => 'customer reorder order id is invalid',
  354. ],
  355. $this->account_favorite_id_not_exist => [
  356. 'message' => 'customer favorite id is not exit',
  357. ],
  358. $this->account_facebook_login_error => [
  359. 'message' => 'login F-E-C-shop with facebook account error',
  360. ],
  361. $this->account_google_login_error => [
  362. 'message' => 'login F-e-c-shop with google account error',
  363. ],
  364. /**
  365. * category
  366. */
  367. $this->category_not_exist => [
  368. 'message' => 'category is not exist',
  369. ],
  370. /**
  371. * product
  372. */
  373. $this->product_favorite_fail => [
  374. 'message' => 'product favorite fail',
  375. ],
  376. $this->product_not_active => [
  377. 'message' => 'product is not exist or off the shelf',
  378. ],
  379. $this->product_id_not_exist => [
  380. 'message' => 'product id is not exist',
  381. ],
  382. $this->product_save_review_fail => [
  383. 'message' => 'save product review fail',
  384. ],
  385. /**
  386. * Cart
  387. */
  388. $this->cart_product_add_fail => [
  389. 'message' => 'product add to cart fail',
  390. ],
  391. $this->cart_product_add_param_invaild => [
  392. 'message' => 'product add to cart request param is invalid',
  393. ],
  394. $this->cart_product_update_qty_fail => [
  395. 'message' => 'update cart product qty fail',
  396. ],
  397. $this->cart_coupon_invalid => [
  398. 'message' => 'coupon code is invalid',
  399. ],
  400. $this->cart_product_select_fail => [
  401. 'message' => 'cart product select fail',
  402. ],
  403. /**
  404. * Order
  405. */
  406. $this->order_generate_product_stock_out => [
  407. 'message' => 'before generate order,check product stock out ',
  408. ],
  409. $this->order_generate_fail => [
  410. 'message' => 'generate order fail',
  411. ],
  412. $this->order_paypal_express_get_token_fail => [
  413. 'message' => 'order pay by paypal express api, fetch token fail',
  414. ],
  415. $this->order_generate_request_post_param_invaild => [
  416. 'message' => 'require order request param is invaild',
  417. ],
  418. $this->order_generate_create_account_fail => [
  419. 'message' => 'order generate page, guest create account fail',
  420. ],
  421. $this->order_generate_save_address_fail => [
  422. 'message' => 'order generate page, login account save address fail',
  423. ],
  424. $this->order_generate_cart_product_empty => [
  425. 'message' => 'order generate page, cart product is empty',
  426. ],
  427. $this->order_shipping_country_empty => [
  428. 'message' => 'order checkout one page, get shipping fail, country is empty',
  429. ],
  430. $this->order_paypal_standard_get_token_fail => [
  431. 'message' => 'order pay by paypal standard api, fetch token fail',
  432. ],
  433. $this->order_paypal_standard_payment_fail => [
  434. 'message' => 'order pay by paypal standard api, payment fail',
  435. ],
  436. $this->order_paypal_standard_updateorderinfoafterpayment_fail => [
  437. 'message' => 'order pay by paypal standard api, update order fail after payment',
  438. ],
  439. $this->order_not_find_increment_id_from_dbsession => [
  440. 'message' => 'can not find order increment id from db session storage',
  441. ],
  442. $this->order_paypal_express_payment_fail => [
  443. 'message' => 'order pay by paypal express api, payment fail',
  444. ],
  445. $this->order_paypal_express_updateorderinfoafterpayment_fail => [
  446. 'message' => 'order pay by paypal express api, update order info fail',
  447. ],
  448. $this->order_paypal_express_get_PayerID_fail => [
  449. 'message' => 'order pay by paypal express api, fetch PayerID fail',
  450. ],
  451. $this->order_paypal_express_get_apiAddress_fail => [
  452. 'message' => 'order pay by paypal express api, fetch address fail',
  453. ],
  454. $this->order_has_been_paid => [
  455. 'message' => 'order has bean paid',
  456. ],
  457. $this->order_not_exist => [
  458. 'message' => 'order is not exist',
  459. ],
  460. $this->order_alipay_payment_fail => [
  461. 'message' => 'order pay by alipay payment fail',
  462. ],
  463. $this->order_wxpay_payment_fail => [
  464. 'message' => 'order pay by wxpay payment fail',
  465. ],
  466. /**
  467. * cms
  468. */
  469. $this->cms_article_not_exist => [
  470. 'message' => 'article is not exist',
  471. ],
  472. ];
  473. return $arr;
  474. }
  475. }