From cc31e056291072711f8796cb9bfc0dfae418878b Mon Sep 17 00:00:00 2001 From: "442384644@qq.com" <442384644@qq.com> Date: Tue, 4 Jan 2022 19:42:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crmeb/app/services/pc/LoginServices.php | 4 +- crmeb/app/services/user/UserServices.php | 45 ++- crmeb/app/services/wechat/WechatServices.php | 29 +- .../services/wechat/WechatUserServices.php | 19 +- .../crmeb/services/Mini3rdProgramService.php | 2 +- crmeb/crmeb/services/WechatOpenService.php | 2 +- crmeb/crmeb/services/WechatService.php | 14 +- .../crmeb/services/easywechat/Application.php | 46 +++ .../easywechat/oauth2/wechat/WechatOauth.php | 282 ++++++++++++++++++ .../oauth2/wechat/WechatOauth2Provider.php | 51 ++++ crmeb/public/index.html | 2 +- .../static/js/chunk-vendors.b7cab945.js | 13 + .../static/js/chunk-vendors.fd05f392.js | 13 - crmeb/public/static/js/index.32c09daf.js | 1 + crmeb/public/static/js/index.9482f767.js | 1 - .../pages-activity-bargain-index.37c4d0d3.js | 1 + .../pages-activity-bargain-index.df522947.js | 1 - ...s-activity-goods_bargain-index.5758140d.js | 1 + ...s-activity-goods_bargain-index.9b7ccf32.js | 1 - ...ty-goods_bargain_details-index.52438a66.js | 1 - ...ty-goods_bargain_details-index.84c32ef9.js | 1 + ...ges-activity-poster-~59f8c0c8.fbd125c1.js} | 2 +- ..._details-index~pages-~d556e4a9.3559ff83.js | 1 + ..._details-index~pages-~d556e4a9.c6515345.js | 1 - ...tivity-goods_combination-index.76499e34.js | 1 - ...tivity-goods_combination-index.991df445.js | 1 + ...oods_combination_details-index.493cb223.js | 1 + ...oods_combination_details-index.a5ee3c23.js | 1 - ..._status-index~pages-a~b3ca01d9.5ddaa6bc.js | 1 - ...ails-index~pages-acti~9fd5f6c0.05e9e40d.js | 1 + ...ails-index~pages-acti~9fd5f6c0.1a09a0c2.js | 1 - ...goods_combination_status-index.6399a9aa.js | 1 - ...goods_combination_status-index.c37a01a3.js | 1 + ...s-activity-goods_seckill-index.9b30e225.js | 1 + ...s-activity-goods_seckill-index.d2c21541.js | 1 - ...ty-goods_seckill_details-index.cfd3a0ce.js | 1 - ...ty-goods_seckill_details-index.ff017a2c.js | 1 + ...s-activity-lottery-grids-index.c1cfd395.js | 1 - ...s-activity-lottery-grids-index.c719a8be.js | 1 + ..._status-payLottery~pa~4af4e820.69ff628b.js | 1 - ..._status-payLottery~pa~4af4e820.6f010ff0.js | 1 + ...-activity-lottery-grids-record.65d55021.js | 1 - ...-activity-lottery-grids-record.f77fab82.js | 1 + ...oods_details-index~p~0dc3edf2.1362fdaa.js} | 2 +- ...s-activity-poster-poster-index.8923dd67.js | 1 + ...s-activity-poster-poster-index.f0448250.js | 1 - .../pages-activity-presell-index.02068e9f.js | 1 - .../pages-activity-presell-index.d82f9b81.js | 1 + ...activity-presell_details-index.15c7049a.js | 1 + ...activity-presell_details-index.52e23816.js | 1 - ...ndex~pages-goods_details-index.a5e2148c.js | 1 + ...admin-order_cancellation-index.8f838265.js | 1 - ...admin-order_cancellation-index.d66b5491.js | 1 + .../pages-annex-offline_pay-index.68f055f5.js | 1 - .../pages-annex-offline_pay-index.ac77a31a.js | 1 + ...ges-annex-offline_result-index.08d4e5fb.js | 1 + ...ges-annex-offline_result-index.e4a9f875.js | 1 - .../js/pages-annex-web_view-index.17af7125.js | 1 - .../js/pages-annex-web_view-index.6cd0a1a6.js | 1 + .../static/js/pages-auth-index.1c2408a2.js | 1 + .../static/js/pages-auth-index.4d33604c.js | 1 - ...lumnGoods-HotNewGoods-feedback.cd351ed4.js | 1 - ...lumnGoods-HotNewGoods-feedback.f0b4c0b8.js | 1 + ...-columnGoods-HotNewGoods-index.5433b1ea.js | 1 - ...-columnGoods-HotNewGoods-index.9ebb15da.js | 1 + .../js/pages-customer_list-chat.4964d5d2.js | 1 - .../js/pages-customer_list-chat.d6df98df.js | 1 + .../js/pages-customer_list-index.9e687056.js | 1 - .../js/pages-customer_list-index.ccf96a6e.js | 1 + .../pages-goods_cate-goods_cate.99c1f407.js | 1 + .../pages-goods_cate-goods_cate.ed486463.js | 1 - .../js/pages-goods_details-index.b94681d5.js | 1 - .../js/pages-goods_details-index.c3ac1293.js | 1 + .../js/pages-goods_list-index.613e47d6.js | 1 + .../js/pages-goods_list-index.9f43ff0f.js | 1 - ...oints_mall-integral_goods_list.02478ea9.js | 1 - ...oints_mall-integral_goods_list.fe3e4789.js | 1 + .../js/pages-goods_search-index.38cdef2c.js | 1 - .../js/pages-goods_search-index.883f84f2.js | 1 + .../static/js/pages-index-index.37871fba.js | 1 - .../static/js/pages-index-index.bddf71f1.js | 1 + .../js/pages-live_list-index.2a20e2b8.js | 1 + .../js/pages-live_list-index.60554f23.js | 1 - .../js/pages-news_details-index.28b73856.js | 1 + .../js/pages-news_details-index.c5d7d74b.js | 1 - .../js/pages-news_list-index.df21eec7.js | 1 + .../js/pages-news_list-index.f1f16712.js | 1 - ...es-order_addcart-order_addcart.23cf5aef.js | 1 - ...es-order_addcart-order_addcart.b9bd1fbe.js | 1 + .../pages-order_pay_status-index.6fe78013.js | 1 + .../pages-order_pay_status-index.fff4059a.js | 1 - ...es-order_pay_status-payLottery.accbc5f6.js | 1 + ...es-order_pay_status-payLottery.eb30f6fa.js | 1 - ...es-points_mall-exchange_record.5a607353.js | 1 + ...es-points_mall-exchange_record.786a7420.js | 1 - .../js/pages-points_mall-index.952721fb.js | 1 + .../js/pages-points_mall-index.d76afaef.js | 1 - ...ts_mall-integral_goods_details.16ce9650.js | 1 + ...ts_mall-integral_goods_details.26d75bc6.js | 1 - ...oints_mall-integral_goods_list.1fdfa4a5.js | 1 + ...oints_mall-integral_goods_list.21f83a47.js | 1 - ...ges-points_mall-integral_order.b355083f.js | 1 + ...ges-points_mall-integral_order.cdb378e8.js | 1 - ...ts_mall-integral_order_details.507b0082.js | 1 + ...ts_mall-integral_order_details.607e2b96.js | 1 - ...nts_mall-integral_order_status.8f9da0a8.js | 1 - ...nts_mall-integral_order_status.b6a23e02.js | 1 + ...-users-order_confirm-~60bb9874.f1275b3d.js | 1 - ...ages-users-order_confirm-index.4db915e0.js | 1 - ...ages-users-order_confirm-index.5ad07528.js | 1 + ...-points_mall-logistics_details.6df63028.js | 1 + ...-points_mall-logistics_details.7a14f9d6.js | 1 - ...pages-points_mall-user_address.8e7c8a31.js | 1 + ...pages-points_mall-user_address.97fb107c.js | 1 - .../pages-retrieve_password-index.290ff5b3.js | 1 - .../pages-retrieve_password-index.93659ba1.js | 1 + .../static/js/pages-user-index.6727ff2e.js | 1 + .../static/js/pages-user-index.9e1f14f9.js | 1 - ...users-admin_order_detail-index.43def8ce.js | 1 - ...users-admin_order_detail-index.c5a81b84.js | 1 + ...ages-users-alipay_invoke-index.293fb14d.js | 1 - ...ages-users-alipay_invoke-index.4e885fbe.js | 1 + ...es-users-commission_rank-index.4fe4ca10.js | 1 + ...es-users-commission_rank-index.d7dedc50.js | 1 - ...-users-goods_comment_con-index.0cc5505d.js | 1 + ...-users-goods_comment_con-index.f6055032.js | 1 - ...ds_comment_con-lottery_comment.0564bd53.js | 1 + ...ds_comment_con-lottery_comment.f6f5dddb.js | 1 - ...users-goods_comment_list-index.6747fa88.js | 1 - ...users-goods_comment_list-index.adccf78e.js | 1 + ...sers-goods_details_store-index.50c71999.js | 1 + ...sers-goods_details_store-index.792f49ac.js | 1 - ...es-users-goods_logistics-index.92f1157f.js | 1 + ...es-users-goods_logistics-index.934d783d.js | 1 - ...pages-users-goods_return-index.235438ea.js | 1 - ...pages-users-goods_return-index.f5b0a5ab.js | 1 + .../js/pages-users-login-index.4befbda5.js | 1 - .../js/pages-users-login-index.b31f840c.js | 1 + ...ges-users-message_center-index.823761e4.js | 1 - ...ges-users-message_center-index.e6ee1a6f.js | 1 + ...s-message_center-messageDetail.2a21c29b.js | 1 - ...s-message_center-messageDetail.53bf561a.js | 1 + ...ages-users-order_confirm-index.a8dffcca.js | 1 + ...ages-users-order_confirm-index.f2910b5a.js | 1 - ...ages-users-order_details-index.20e37fd6.js | 1 + ...ages-users-order_details-index.d6d999a2.js | 1 - ...er_list-index~pages-u~786f6035.403bda3a.js | 1 + ...ages-users-order_details-index.8cc85873.js | 1 + ...ages-users-order_details-index.9275a368.js | 1 - .../pages-users-order_list-index.25706d6a.js | 1 - .../pages-users-order_list-index.6855e39f.js | 1 + .../js/pages-users-privacy-index.c7a99047.js | 1 - .../js/pages-users-privacy-index.eca03b68.js | 1 + ...ages-users-promoter-list-index.01f43298.js | 1 - ...ages-users-promoter-list-index.1f2b5d80.js | 1 + ...ges-users-promoter-order-index.739e10c3.js | 1 - ...ges-users-promoter-order-index.84b04410.js | 1 + ...ages-users-promoter_rank-index.03439af3.js | 1 + ...ages-users-promoter_rank-index.9a16be49.js | 1 - ...s-users-retrievePassword-index.123df70b.js | 1 - ...s-users-retrievePassword-index.fa7fddc3.js | 1 + .../pages-users-scan_login-index.503b3fe6.js | 1 - .../pages-users-scan_login-index.df7df0c8.js | 1 + ...pages-users-user_address-index.47e8b2c8.js | 1 + ...pages-users-user_address-index.7f103f7d.js | 1 - ...-users-user_address_list-index.5a2417c5.js | 1 - ...-users-user_address_list-index.5e4829f3.js | 1 + .../pages-users-user_bill-index.22892a8c.js | 1 + .../pages-users-user_bill-index.4245ce32.js | 1 - .../pages-users-user_cash-index.18014d02.js | 1 - .../pages-users-user_cash-index.ac3c9bc1.js | 1 + .../pages-users-user_coupon-index.92ee566d.js | 1 - .../pages-users-user_coupon-index.d1bc67e0.js | 1 + ...-user_distribution_level-index.58357f8e.js | 1 + ...-user_distribution_level-index.adf183b2.js | 1 - ...es-users-user_get_coupon-index.dafe8ced.js | 1 - ...es-users-user_get_coupon-index.df39f361.js | 1 + ...rs-user_goods_collection-index.d450fc57.js | 1 - ...rs-user_goods_collection-index.f2b56317.js | 1 + .../pages-users-user_info-index.0936dbeb.js | 1 - .../pages-users-user_info-index.22ab32fb.js | 1 + ...ages-users-user_integral-index.7bb8342c.js | 1 - ...ages-users-user_integral-index.c1c1c9c9.js | 1 + ...-users-user_invoice_form-index.18e56b90.js | 1 - ...-users-user_invoice_form-index.4595ec71.js | 1 + ...-users-user_invoice_list-index.97ff197e.js | 1 + ...-users-user_invoice_list-index.ab47f831.js | 1 - ...users-user_invoice_order-index.16c3dac9.js | 1 + ...users-user_invoice_order-index.7146c13f.js | 1 - .../pages-users-user_money-index.94f8b4ee.js | 1 - .../pages-users-user_money-index.ead1a854.js | 1 + ...pages-users-user_payment-index.c14e61d5.js | 1 + ...pages-users-user_payment-index.ea6e5f94.js | 1 - .../pages-users-user_phone-index.4fc9508f.js | 1 + .../pages-users-user_phone-index.ae3bb207.js | 1 - ...ages-users-user_pwd_edit-index.77e67d47.js | 1 - ...ages-users-user_pwd_edit-index.c94a8f26.js | 1 + ...s-users-user_return_list-index.925145a8.js | 1 - ...s-users-user_return_list-index.fc969bb8.js | 1 + .../pages-users-user_sgin-index.529abb7e.js | 1 - .../pages-users-user_sgin-index.a321239e.js | 1 + ...ges-users-user_sgin_list-index.7b58e5d9.js | 1 + ...ges-users-user_sgin_list-index.9fd7cd69.js | 1 - ...s-users-user_spread_code-index.3976744d.js | 1 - ...s-users-user_spread_code-index.8e8e21a7.js | 1 + ...-users-user_spread_money-index.068c32a3.js | 1 + ...-users-user_spread_money-index.fd50c8ec.js | 1 - ...s-users-user_spread_user-index.5e7e24e3.js | 1 + ...s-users-user_spread_user-index.a1a6df16.js | 1 - .../js/pages-users-user_vip-index.3380fc16.js | 1 + .../js/pages-users-user_vip-index.3d7fae9b.js | 1 - ...ges-users-user_vip_areer-index.cf9ccfa9.js | 1 - ...ges-users-user_vip_areer-index.e94bcab7.js | 1 + ...pages-users-wechat_login-index.7549f3eb.js | 1 - ...pages-users-wechat_login-index.e3f06606.js | 1 + template/uni-app/App.vue | 22 +- template/uni-app/libs/login.js | 7 +- template/uni-app/libs/wechat.js | 96 +++--- template/uni-app/pages/user/index.vue | 27 +- 219 files changed, 662 insertions(+), 216 deletions(-) create mode 100644 crmeb/crmeb/services/easywechat/Application.php create mode 100644 crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth.php create mode 100644 crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth2Provider.php create mode 100644 crmeb/public/static/js/chunk-vendors.b7cab945.js delete mode 100644 crmeb/public/static/js/chunk-vendors.fd05f392.js create mode 100644 crmeb/public/static/js/index.32c09daf.js delete mode 100644 crmeb/public/static/js/index.9482f767.js create mode 100644 crmeb/public/static/js/pages-activity-bargain-index.37c4d0d3.js delete mode 100644 crmeb/public/static/js/pages-activity-bargain-index.df522947.js create mode 100644 crmeb/public/static/js/pages-activity-goods_bargain-index.5758140d.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_bargain-index.9b7ccf32.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_bargain_details-index.52438a66.js create mode 100644 crmeb/public/static/js/pages-activity-goods_bargain_details-index.84c32ef9.js rename crmeb/public/static/js/{pages-activity-goods_bargain_details-index~pages-activity-lottery-grids-index~pages-activity-poster-~59f8c0c8.d3587983.js => pages-activity-goods_bargain_details-index~pages-activity-lottery-grids-index~pages-activity-poster-~59f8c0c8.fbd125c1.js} (71%) create mode 100644 crmeb/public/static/js/pages-activity-goods_bargain_details-index~pages-goods_details-index~pages-news_details-index~pages-~d556e4a9.3559ff83.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_bargain_details-index~pages-goods_details-index~pages-news_details-index~pages-~d556e4a9.c6515345.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_combination-index.76499e34.js create mode 100644 crmeb/public/static/js/pages-activity-goods_combination-index.991df445.js create mode 100644 crmeb/public/static/js/pages-activity-goods_combination_details-index.493cb223.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_combination_details-index.a5ee3c23.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_combination_details-index~pages-activity-goods_combination_status-index~pages-a~b3ca01d9.5ddaa6bc.js create mode 100644 crmeb/public/static/js/pages-activity-goods_combination_details-index~pages-activity-goods_seckill_details-index~pages-acti~9fd5f6c0.05e9e40d.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_combination_details-index~pages-activity-goods_seckill_details-index~pages-acti~9fd5f6c0.1a09a0c2.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_combination_status-index.6399a9aa.js create mode 100644 crmeb/public/static/js/pages-activity-goods_combination_status-index.c37a01a3.js create mode 100644 crmeb/public/static/js/pages-activity-goods_seckill-index.9b30e225.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_seckill-index.d2c21541.js delete mode 100644 crmeb/public/static/js/pages-activity-goods_seckill_details-index.cfd3a0ce.js create mode 100644 crmeb/public/static/js/pages-activity-goods_seckill_details-index.ff017a2c.js delete mode 100644 crmeb/public/static/js/pages-activity-lottery-grids-index.c1cfd395.js create mode 100644 crmeb/public/static/js/pages-activity-lottery-grids-index.c719a8be.js delete mode 100644 crmeb/public/static/js/pages-activity-lottery-grids-index~pages-order_pay_status-index~pages-order_pay_status-payLottery~pa~4af4e820.69ff628b.js create mode 100644 crmeb/public/static/js/pages-activity-lottery-grids-index~pages-order_pay_status-index~pages-order_pay_status-payLottery~pa~4af4e820.6f010ff0.js delete mode 100644 crmeb/public/static/js/pages-activity-lottery-grids-record.65d55021.js create mode 100644 crmeb/public/static/js/pages-activity-lottery-grids-record.f77fab82.js rename crmeb/public/static/js/{pages-activity-lottery-grids-record~pages-activity-presell_details-index~pages-goods_details-index~p~0dc3edf2.b3fafd5e.js => pages-activity-lottery-grids-record~pages-activity-presell_details-index~pages-goods_details-index~p~0dc3edf2.1362fdaa.js} (97%) create mode 100644 crmeb/public/static/js/pages-activity-poster-poster-index.8923dd67.js delete mode 100644 crmeb/public/static/js/pages-activity-poster-poster-index.f0448250.js delete mode 100644 crmeb/public/static/js/pages-activity-presell-index.02068e9f.js create mode 100644 crmeb/public/static/js/pages-activity-presell-index.d82f9b81.js create mode 100644 crmeb/public/static/js/pages-activity-presell_details-index.15c7049a.js delete mode 100644 crmeb/public/static/js/pages-activity-presell_details-index.52e23816.js create mode 100644 crmeb/public/static/js/pages-activity-presell_details-index~pages-goods_details-index.a5e2148c.js delete mode 100644 crmeb/public/static/js/pages-admin-order_cancellation-index.8f838265.js create mode 100644 crmeb/public/static/js/pages-admin-order_cancellation-index.d66b5491.js delete mode 100644 crmeb/public/static/js/pages-annex-offline_pay-index.68f055f5.js create mode 100644 crmeb/public/static/js/pages-annex-offline_pay-index.ac77a31a.js create mode 100644 crmeb/public/static/js/pages-annex-offline_result-index.08d4e5fb.js delete mode 100644 crmeb/public/static/js/pages-annex-offline_result-index.e4a9f875.js delete mode 100644 crmeb/public/static/js/pages-annex-web_view-index.17af7125.js create mode 100644 crmeb/public/static/js/pages-annex-web_view-index.6cd0a1a6.js create mode 100644 crmeb/public/static/js/pages-auth-index.1c2408a2.js delete mode 100644 crmeb/public/static/js/pages-auth-index.4d33604c.js delete mode 100644 crmeb/public/static/js/pages-columnGoods-HotNewGoods-feedback.cd351ed4.js create mode 100644 crmeb/public/static/js/pages-columnGoods-HotNewGoods-feedback.f0b4c0b8.js delete mode 100644 crmeb/public/static/js/pages-columnGoods-HotNewGoods-index.5433b1ea.js create mode 100644 crmeb/public/static/js/pages-columnGoods-HotNewGoods-index.9ebb15da.js delete mode 100644 crmeb/public/static/js/pages-customer_list-chat.4964d5d2.js create mode 100644 crmeb/public/static/js/pages-customer_list-chat.d6df98df.js delete mode 100644 crmeb/public/static/js/pages-customer_list-index.9e687056.js create mode 100644 crmeb/public/static/js/pages-customer_list-index.ccf96a6e.js create mode 100644 crmeb/public/static/js/pages-goods_cate-goods_cate.99c1f407.js delete mode 100644 crmeb/public/static/js/pages-goods_cate-goods_cate.ed486463.js delete mode 100644 crmeb/public/static/js/pages-goods_details-index.b94681d5.js create mode 100644 crmeb/public/static/js/pages-goods_details-index.c3ac1293.js create mode 100644 crmeb/public/static/js/pages-goods_list-index.613e47d6.js delete mode 100644 crmeb/public/static/js/pages-goods_list-index.9f43ff0f.js delete mode 100644 crmeb/public/static/js/pages-goods_list-index~pages-points_mall-integral_goods_list.02478ea9.js create mode 100644 crmeb/public/static/js/pages-goods_list-index~pages-points_mall-integral_goods_list.fe3e4789.js delete mode 100644 crmeb/public/static/js/pages-goods_search-index.38cdef2c.js create mode 100644 crmeb/public/static/js/pages-goods_search-index.883f84f2.js delete mode 100644 crmeb/public/static/js/pages-index-index.37871fba.js create mode 100644 crmeb/public/static/js/pages-index-index.bddf71f1.js create mode 100644 crmeb/public/static/js/pages-live_list-index.2a20e2b8.js delete mode 100644 crmeb/public/static/js/pages-live_list-index.60554f23.js create mode 100644 crmeb/public/static/js/pages-news_details-index.28b73856.js delete mode 100644 crmeb/public/static/js/pages-news_details-index.c5d7d74b.js create mode 100644 crmeb/public/static/js/pages-news_list-index.df21eec7.js delete mode 100644 crmeb/public/static/js/pages-news_list-index.f1f16712.js delete mode 100644 crmeb/public/static/js/pages-order_addcart-order_addcart.23cf5aef.js create mode 100644 crmeb/public/static/js/pages-order_addcart-order_addcart.b9bd1fbe.js create mode 100644 crmeb/public/static/js/pages-order_pay_status-index.6fe78013.js delete mode 100644 crmeb/public/static/js/pages-order_pay_status-index.fff4059a.js create mode 100644 crmeb/public/static/js/pages-order_pay_status-payLottery.accbc5f6.js delete mode 100644 crmeb/public/static/js/pages-order_pay_status-payLottery.eb30f6fa.js create mode 100644 crmeb/public/static/js/pages-points_mall-exchange_record.5a607353.js delete mode 100644 crmeb/public/static/js/pages-points_mall-exchange_record.786a7420.js create mode 100644 crmeb/public/static/js/pages-points_mall-index.952721fb.js delete mode 100644 crmeb/public/static/js/pages-points_mall-index.d76afaef.js create mode 100644 crmeb/public/static/js/pages-points_mall-integral_goods_details.16ce9650.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_goods_details.26d75bc6.js create mode 100644 crmeb/public/static/js/pages-points_mall-integral_goods_list.1fdfa4a5.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_goods_list.21f83a47.js create mode 100644 crmeb/public/static/js/pages-points_mall-integral_order.b355083f.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_order.cdb378e8.js create mode 100644 crmeb/public/static/js/pages-points_mall-integral_order_details.507b0082.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_order_details.607e2b96.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_order_status.8f9da0a8.js create mode 100644 crmeb/public/static/js/pages-points_mall-integral_order_status.b6a23e02.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_order~pages-points_mall-integral_order_details~pages-users-order_confirm-~60bb9874.f1275b3d.js delete mode 100644 crmeb/public/static/js/pages-points_mall-integral_order~pages-users-order_confirm-index.4db915e0.js create mode 100644 crmeb/public/static/js/pages-points_mall-integral_order~pages-users-order_confirm-index.5ad07528.js create mode 100644 crmeb/public/static/js/pages-points_mall-logistics_details.6df63028.js delete mode 100644 crmeb/public/static/js/pages-points_mall-logistics_details.7a14f9d6.js create mode 100644 crmeb/public/static/js/pages-points_mall-user_address.8e7c8a31.js delete mode 100644 crmeb/public/static/js/pages-points_mall-user_address.97fb107c.js delete mode 100644 crmeb/public/static/js/pages-retrieve_password-index.290ff5b3.js create mode 100644 crmeb/public/static/js/pages-retrieve_password-index.93659ba1.js create mode 100644 crmeb/public/static/js/pages-user-index.6727ff2e.js delete mode 100644 crmeb/public/static/js/pages-user-index.9e1f14f9.js delete mode 100644 crmeb/public/static/js/pages-users-admin_order_detail-index.43def8ce.js create mode 100644 crmeb/public/static/js/pages-users-admin_order_detail-index.c5a81b84.js delete mode 100644 crmeb/public/static/js/pages-users-alipay_invoke-index.293fb14d.js create mode 100644 crmeb/public/static/js/pages-users-alipay_invoke-index.4e885fbe.js create mode 100644 crmeb/public/static/js/pages-users-commission_rank-index.4fe4ca10.js delete mode 100644 crmeb/public/static/js/pages-users-commission_rank-index.d7dedc50.js create mode 100644 crmeb/public/static/js/pages-users-goods_comment_con-index.0cc5505d.js delete mode 100644 crmeb/public/static/js/pages-users-goods_comment_con-index.f6055032.js create mode 100644 crmeb/public/static/js/pages-users-goods_comment_con-lottery_comment.0564bd53.js delete mode 100644 crmeb/public/static/js/pages-users-goods_comment_con-lottery_comment.f6f5dddb.js delete mode 100644 crmeb/public/static/js/pages-users-goods_comment_list-index.6747fa88.js create mode 100644 crmeb/public/static/js/pages-users-goods_comment_list-index.adccf78e.js create mode 100644 crmeb/public/static/js/pages-users-goods_details_store-index.50c71999.js delete mode 100644 crmeb/public/static/js/pages-users-goods_details_store-index.792f49ac.js create mode 100644 crmeb/public/static/js/pages-users-goods_logistics-index.92f1157f.js delete mode 100644 crmeb/public/static/js/pages-users-goods_logistics-index.934d783d.js delete mode 100644 crmeb/public/static/js/pages-users-goods_return-index.235438ea.js create mode 100644 crmeb/public/static/js/pages-users-goods_return-index.f5b0a5ab.js delete mode 100644 crmeb/public/static/js/pages-users-login-index.4befbda5.js create mode 100644 crmeb/public/static/js/pages-users-login-index.b31f840c.js delete mode 100644 crmeb/public/static/js/pages-users-message_center-index.823761e4.js create mode 100644 crmeb/public/static/js/pages-users-message_center-index.e6ee1a6f.js delete mode 100644 crmeb/public/static/js/pages-users-message_center-messageDetail.2a21c29b.js create mode 100644 crmeb/public/static/js/pages-users-message_center-messageDetail.53bf561a.js create mode 100644 crmeb/public/static/js/pages-users-order_confirm-index.a8dffcca.js delete mode 100644 crmeb/public/static/js/pages-users-order_confirm-index.f2910b5a.js create mode 100644 crmeb/public/static/js/pages-users-order_confirm-index~pages-users-order_details-index.20e37fd6.js delete mode 100644 crmeb/public/static/js/pages-users-order_confirm-index~pages-users-order_details-index.d6d999a2.js create mode 100644 crmeb/public/static/js/pages-users-order_confirm-index~pages-users-order_details-index~pages-users-order_list-index~pages-u~786f6035.403bda3a.js create mode 100644 crmeb/public/static/js/pages-users-order_details-index.8cc85873.js delete mode 100644 crmeb/public/static/js/pages-users-order_details-index.9275a368.js delete mode 100644 crmeb/public/static/js/pages-users-order_list-index.25706d6a.js create mode 100644 crmeb/public/static/js/pages-users-order_list-index.6855e39f.js delete mode 100644 crmeb/public/static/js/pages-users-privacy-index.c7a99047.js create mode 100644 crmeb/public/static/js/pages-users-privacy-index.eca03b68.js delete mode 100644 crmeb/public/static/js/pages-users-promoter-list-index.01f43298.js create mode 100644 crmeb/public/static/js/pages-users-promoter-list-index.1f2b5d80.js delete mode 100644 crmeb/public/static/js/pages-users-promoter-order-index.739e10c3.js create mode 100644 crmeb/public/static/js/pages-users-promoter-order-index.84b04410.js create mode 100644 crmeb/public/static/js/pages-users-promoter_rank-index.03439af3.js delete mode 100644 crmeb/public/static/js/pages-users-promoter_rank-index.9a16be49.js delete mode 100644 crmeb/public/static/js/pages-users-retrievePassword-index.123df70b.js create mode 100644 crmeb/public/static/js/pages-users-retrievePassword-index.fa7fddc3.js delete mode 100644 crmeb/public/static/js/pages-users-scan_login-index.503b3fe6.js create mode 100644 crmeb/public/static/js/pages-users-scan_login-index.df7df0c8.js create mode 100644 crmeb/public/static/js/pages-users-user_address-index.47e8b2c8.js delete mode 100644 crmeb/public/static/js/pages-users-user_address-index.7f103f7d.js delete mode 100644 crmeb/public/static/js/pages-users-user_address_list-index.5a2417c5.js create mode 100644 crmeb/public/static/js/pages-users-user_address_list-index.5e4829f3.js create mode 100644 crmeb/public/static/js/pages-users-user_bill-index.22892a8c.js delete mode 100644 crmeb/public/static/js/pages-users-user_bill-index.4245ce32.js delete mode 100644 crmeb/public/static/js/pages-users-user_cash-index.18014d02.js create mode 100644 crmeb/public/static/js/pages-users-user_cash-index.ac3c9bc1.js delete mode 100644 crmeb/public/static/js/pages-users-user_coupon-index.92ee566d.js create mode 100644 crmeb/public/static/js/pages-users-user_coupon-index.d1bc67e0.js create mode 100644 crmeb/public/static/js/pages-users-user_distribution_level-index.58357f8e.js delete mode 100644 crmeb/public/static/js/pages-users-user_distribution_level-index.adf183b2.js delete mode 100644 crmeb/public/static/js/pages-users-user_get_coupon-index.dafe8ced.js create mode 100644 crmeb/public/static/js/pages-users-user_get_coupon-index.df39f361.js delete mode 100644 crmeb/public/static/js/pages-users-user_goods_collection-index.d450fc57.js create mode 100644 crmeb/public/static/js/pages-users-user_goods_collection-index.f2b56317.js delete mode 100644 crmeb/public/static/js/pages-users-user_info-index.0936dbeb.js create mode 100644 crmeb/public/static/js/pages-users-user_info-index.22ab32fb.js delete mode 100644 crmeb/public/static/js/pages-users-user_integral-index.7bb8342c.js create mode 100644 crmeb/public/static/js/pages-users-user_integral-index.c1c1c9c9.js delete mode 100644 crmeb/public/static/js/pages-users-user_invoice_form-index.18e56b90.js create mode 100644 crmeb/public/static/js/pages-users-user_invoice_form-index.4595ec71.js create mode 100644 crmeb/public/static/js/pages-users-user_invoice_list-index.97ff197e.js delete mode 100644 crmeb/public/static/js/pages-users-user_invoice_list-index.ab47f831.js create mode 100644 crmeb/public/static/js/pages-users-user_invoice_order-index.16c3dac9.js delete mode 100644 crmeb/public/static/js/pages-users-user_invoice_order-index.7146c13f.js delete mode 100644 crmeb/public/static/js/pages-users-user_money-index.94f8b4ee.js create mode 100644 crmeb/public/static/js/pages-users-user_money-index.ead1a854.js create mode 100644 crmeb/public/static/js/pages-users-user_payment-index.c14e61d5.js delete mode 100644 crmeb/public/static/js/pages-users-user_payment-index.ea6e5f94.js create mode 100644 crmeb/public/static/js/pages-users-user_phone-index.4fc9508f.js delete mode 100644 crmeb/public/static/js/pages-users-user_phone-index.ae3bb207.js delete mode 100644 crmeb/public/static/js/pages-users-user_pwd_edit-index.77e67d47.js create mode 100644 crmeb/public/static/js/pages-users-user_pwd_edit-index.c94a8f26.js delete mode 100644 crmeb/public/static/js/pages-users-user_return_list-index.925145a8.js create mode 100644 crmeb/public/static/js/pages-users-user_return_list-index.fc969bb8.js delete mode 100644 crmeb/public/static/js/pages-users-user_sgin-index.529abb7e.js create mode 100644 crmeb/public/static/js/pages-users-user_sgin-index.a321239e.js create mode 100644 crmeb/public/static/js/pages-users-user_sgin_list-index.7b58e5d9.js delete mode 100644 crmeb/public/static/js/pages-users-user_sgin_list-index.9fd7cd69.js delete mode 100644 crmeb/public/static/js/pages-users-user_spread_code-index.3976744d.js create mode 100644 crmeb/public/static/js/pages-users-user_spread_code-index.8e8e21a7.js create mode 100644 crmeb/public/static/js/pages-users-user_spread_money-index.068c32a3.js delete mode 100644 crmeb/public/static/js/pages-users-user_spread_money-index.fd50c8ec.js create mode 100644 crmeb/public/static/js/pages-users-user_spread_user-index.5e7e24e3.js delete mode 100644 crmeb/public/static/js/pages-users-user_spread_user-index.a1a6df16.js create mode 100644 crmeb/public/static/js/pages-users-user_vip-index.3380fc16.js delete mode 100644 crmeb/public/static/js/pages-users-user_vip-index.3d7fae9b.js delete mode 100644 crmeb/public/static/js/pages-users-user_vip_areer-index.cf9ccfa9.js create mode 100644 crmeb/public/static/js/pages-users-user_vip_areer-index.e94bcab7.js delete mode 100644 crmeb/public/static/js/pages-users-wechat_login-index.7549f3eb.js create mode 100644 crmeb/public/static/js/pages-users-wechat_login-index.e3f06606.js diff --git a/crmeb/app/services/pc/LoginServices.php b/crmeb/app/services/pc/LoginServices.php index 78e15179e..66bf9cd9f 100644 --- a/crmeb/app/services/pc/LoginServices.php +++ b/crmeb/app/services/pc/LoginServices.php @@ -109,8 +109,8 @@ class LoginServices extends BaseServices throw new ValidateException('unionid不存在'); } if (!isset($wechatInfo['nickname'])) { - $wechatInfo = WechatAuthService::getUserInfo($wechatInfo['openid']); - if (!$wechatInfo['subscribe'] && !isset($wechatInfo['nickname'])) + $wechatInfo = WechatAuthService::oauth2Service()->getUserInfo($wechatInfo['openid'])->toArray(); + if (!isset($wechatInfo['nickname'])) throw new ValidateException('授权失败'); if (isset($wechatInfo['tagid_list'])) $wechatInfo['tagid_list'] = implode(',', $wechatInfo['tagid_list']); diff --git a/crmeb/app/services/user/UserServices.php b/crmeb/app/services/user/UserServices.php index 1c4854308..fb58949fd 100644 --- a/crmeb/app/services/user/UserServices.php +++ b/crmeb/app/services/user/UserServices.php @@ -1779,34 +1779,33 @@ class UserServices extends BaseServices foreach ($noBeOpenids as $openid) { try { $info = WechatService::getUserInfo($openid); + $info = is_object($info) ? $info->toArray() : $info; } catch (\Throwable $e) { $info = []; } if (!$info) continue; - if ($info['subscribe'] == 1) { - $data['nickname'] = $info['nickname'] ?? ''; - $data['headimgurl'] = $info['headimgurl'] ?? ''; - $userInfoData = $this->setUserInfo($data); - if (!$userInfoData) { - throw new AdminException('用户信息储存失败!'); - } - $data['uid'] = $userInfoData['uid']; - $data['subscribe'] = $info['subscribe']; - $data['unionid'] = $info['unionid'] ?? ''; - $data['openid'] = $info['openid'] ?? ''; - $data['sex'] = $info['sex'] ?? 0; - $data['language'] = $info['language'] ?? ''; - $data['city'] = $info['city'] ?? ''; - $data['province'] = $info['province'] ?? ''; - $data['country'] = $info['country'] ?? ''; - $data['subscribe_time'] = $info['subscribe_time'] ?? ''; - $data['groupid'] = $info['groupid'] ?? 0; - $data['remark'] = $info['remark'] ?? ''; - $data['tagid_list'] = isset($info['tagid_list']) && $info['tagid_list'] ? implode(',', $info['tagid_list']) : ''; - $data['add_time'] = $time; - $data['is_complete'] = 1; - $dataAll[] = $data; + $data['nickname'] = $info['nickname'] ?? ''; + $data['headimgurl'] = $info['headimgurl'] ?? ''; + $userInfoData = $this->setUserInfo($data); + if (!$userInfoData) { + throw new AdminException('用户信息储存失败!'); } + $data['uid'] = $userInfoData['uid']; + $data['subscribe'] = $info['subscribe'] ?? 1; + $data['unionid'] = $info['unionid'] ?? ''; + $data['openid'] = $info['openid'] ?? ''; + $data['sex'] = $info['sex'] ?? 0; + $data['language'] = $info['language'] ?? ''; + $data['city'] = $info['city'] ?? ''; + $data['province'] = $info['province'] ?? ''; + $data['country'] = $info['country'] ?? ''; + $data['subscribe_time'] = $info['subscribe_time'] ?? ''; + $data['groupid'] = $info['groupid'] ?? 0; + $data['remark'] = $info['remark'] ?? ''; + $data['tagid_list'] = isset($info['tagid_list']) && $info['tagid_list'] ? implode(',', $info['tagid_list']) : ''; + $data['add_time'] = $time; + $data['is_complete'] = 1; + $dataAll[] = $data; } if ($dataAll) { /** @var WechatUserServices $wechatUser */ diff --git a/crmeb/app/services/wechat/WechatServices.php b/crmeb/app/services/wechat/WechatServices.php index c1a958965..3f7a111c3 100644 --- a/crmeb/app/services/wechat/WechatServices.php +++ b/crmeb/app/services/wechat/WechatServices.php @@ -79,13 +79,13 @@ class WechatServices extends BaseServices public function auth($spreadId, $login_type) { try { - $wechatInfo = WechatAuthService::oauthService()->user()->getOriginal(); + $wechatInfo = WechatAuthService::oauth2Service()->oauth(); } catch (\Exception $e) { throw new ValidateException('授权失败' . $e->getMessage() . 'line' . $e->getLine()); } if (!isset($wechatInfo['nickname'])) { - $wechatInfo = WechatAuthService::getUserInfo($wechatInfo['openid']); - if (!$wechatInfo['subscribe'] && !isset($wechatInfo['nickname'])) + $wechatInfo = WechatAuthService::oauth2Service()->getUserInfo($wechatInfo['openid'])->toArray(); + if (!isset($wechatInfo['nickname'])) throw new ValidateException('授权失败'); if (isset($wechatInfo['tagid_list'])) $wechatInfo['tagid_list'] = implode(',', $wechatInfo['tagid_list']); @@ -129,13 +129,13 @@ class WechatServices extends BaseServices public function newAuth($spreadId, $login_type) { try { - $wechatInfo = WechatAuthService::oauthService()->user()->getOriginal(); + $wechatInfo = WechatAuthService::oauth2Service()->oauth(); } catch (\Exception $e) { throw new ValidateException('授权失败' . $e->getMessage() . 'line' . $e->getLine()); } if (!isset($wechatInfo['nickname'])) { - $wechatInfo = WechatAuthService::getUserInfo($wechatInfo['openid']); - if (!$wechatInfo['subscribe'] && !isset($wechatInfo['nickname'])) + $wechatInfo = WechatAuthService::oauth2Service()->getUserInfo($wechatInfo['openid'])->toArray(); + if (!isset($wechatInfo['nickname'])) throw new ValidateException('授权失败'); if (isset($wechatInfo['tagid_list'])) $wechatInfo['tagid_list'] = implode(',', $wechatInfo['tagid_list']); @@ -210,8 +210,8 @@ class WechatServices extends BaseServices */ public function silenceAuth($spread) { - $wechatInfoConfig = WechatAuthService::oauthService()->user()->getOriginal(); - $wechatInfo = WechatAuthService::getUserInfo($wechatInfoConfig['openid'])->toArray(); + $wechatInfoConfig = WechatAuthService::oauth2Service()->oauth(); + $wechatInfo = WechatAuthService::oauth2Service()->getUserInfo($wechatInfoConfig['openid'])->toArray(); $openid = $wechatInfoConfig['openid']; /** @var WechatUserServices $wechatUserServices */ $wechatUserServices = app()->make(WechatUserServices::class); @@ -258,9 +258,16 @@ class WechatServices extends BaseServices */ public function silenceAuthNoLogin($spread) { - $wechatInfoConfig = WechatAuthService::oauthService()->user()->getOriginal(); - $wechatInfo = WechatAuthService::getUserInfo($wechatInfoConfig['openid'])->toArray(); + $wechatInfoConfig = WechatAuthService::oauth2Service()->oauth(); $openid = $wechatInfoConfig['openid']; + try { + $wechatInfo = WechatAuthService::oauth2Service()->getUserInfo($wechatInfoConfig['openid'])->toArray(); + } catch (\Throwable $e) { + $createData = [$openid, [], $spread, '', 'wechat']; + $userInfoKey = md5($openid . '_' . time() . '_wechat'); + Cache::setTokenBucket($userInfoKey, $createData, 7200); + return ['auth_login' => 1, 'key' => $userInfoKey]; + } /** @var WechatUserServices $wechatUserServices */ $wechatUserServices = app()->make(WechatUserServices::class); $user = $wechatUserServices->getAuthUserInfo($openid, 'wechat'); @@ -328,7 +335,7 @@ class WechatServices extends BaseServices public function isSubscribe(int $uid) { if ($uid) { - $subscribe = $this->dao->value(['uid' => $uid], 'subscribe') ? true : false; + $subscribe = (bool)$this->dao->value(['uid' => $uid], 'subscribe'); } else { $subscribe = true; } diff --git a/crmeb/app/services/wechat/WechatUserServices.php b/crmeb/app/services/wechat/WechatUserServices.php index 9f9365e3d..fe0aa58d7 100644 --- a/crmeb/app/services/wechat/WechatUserServices.php +++ b/crmeb/app/services/wechat/WechatUserServices.php @@ -123,8 +123,17 @@ class WechatUserServices extends BaseServices public function updateUser($openid) { $userInfo = WechatService::getUserInfo($openid); - $userInfo['tagid_list'] = implode(',', $userInfo['tagid_list']); - if (!$this->dao->update($openid, $userInfo->toArray(), 'openid')) + $userInfo = is_object($userInfo) ? $userInfo->toArray() : $userInfo; + if (isset($userInfo['nickname']) && $userInfo['nickname']) { + $userInfo['nickname'] = filter_emoji($userInfo['nickname']); + } else { + mt_srand(); + $userInfo['nickname'] = 'wx' . rand(100000, 999999); + } + if (isset($userInfo['tagid_list'])) { + $userInfo['tagid_list'] = implode(',', $userInfo['tagid_list']); + } + if (!$this->dao->update($openid, $userInfo, 'openid')) throw new AdminException('更新失败'); return true; } @@ -137,6 +146,12 @@ class WechatUserServices extends BaseServices public function setNewUser($openid) { $userInfo = WechatService::getUserInfo($openid); + if (isset($userInfo['nickname']) && $userInfo['nickname']) { + $userInfo['nickname'] = filter_emoji($userInfo['nickname']); + } else { + mt_srand(); + $userInfo['nickname'] = 'wx' . rand(100000, 999999); + } if (!isset($userInfo['subscribe']) || !$userInfo['subscribe'] || !isset($userInfo['openid'])) throw new ValidateException('请关注公众号!'); $userInfo = $userInfo->toArray(); diff --git a/crmeb/crmeb/services/Mini3rdProgramService.php b/crmeb/crmeb/services/Mini3rdProgramService.php index ecce63548..e7188c219 100644 --- a/crmeb/crmeb/services/Mini3rdProgramService.php +++ b/crmeb/crmeb/services/Mini3rdProgramService.php @@ -13,7 +13,7 @@ namespace crmeb\services; use app\services\pay\PayNotifyServices; use crmeb\exceptions\ApiException; -use EasyWeChat\Foundation\Application; +use crmeb\services\easywechat\Application; use think\exception\ValidateException; use crmeb\utils\Hook; use think\Response; diff --git a/crmeb/crmeb/services/WechatOpenService.php b/crmeb/crmeb/services/WechatOpenService.php index c362d0ce9..6ea00e025 100644 --- a/crmeb/crmeb/services/WechatOpenService.php +++ b/crmeb/crmeb/services/WechatOpenService.php @@ -11,7 +11,7 @@ namespace crmeb\services; -use EasyWeChat\Foundation\Application; +use crmeb\services\easywechat\Application; class WechatOpenService { diff --git a/crmeb/crmeb/services/WechatService.php b/crmeb/crmeb/services/WechatService.php index a0373dc73..917169c9c 100644 --- a/crmeb/crmeb/services/WechatService.php +++ b/crmeb/crmeb/services/WechatService.php @@ -17,7 +17,7 @@ use app\services\wechat\WechatReplyServices; use crmeb\exceptions\AdminException; use app\services\pay\PayNotifyServices; use crmeb\utils\ApiErrorCode; -use EasyWeChat\Foundation\Application; +use crmeb\services\easywechat\Application; use EasyWeChat\Message\Article; use EasyWeChat\Message\Image; use EasyWeChat\Message\Material; @@ -27,6 +27,7 @@ use EasyWeChat\Message\Video; use EasyWeChat\Message\Voice; use EasyWeChat\Payment\Order; use EasyWeChat\Server\Guard; +use Symfony\Component\HttpFoundation\Request; use think\exception\ValidateException; use think\Response; use crmeb\utils\Hook; @@ -242,6 +243,17 @@ class WechatService return self::application()->oauth; } + /** + * 网页授权 + * @return easywechat\oauth2\wechat\WechatOauth2Provider + */ + public static function oauth2Service() + { + $request = app()->request; + self::application()->oauth2->setRequest(new Request($request->get(), $request->post(), [], [], [], $request->server(), $request->getContent())); + return self::application()->oauth2; + } + /** * 模板消息接口 * @return \EasyWeChat\Notice\Notice diff --git a/crmeb/crmeb/services/easywechat/Application.php b/crmeb/crmeb/services/easywechat/Application.php new file mode 100644 index 000000000..89b229eba --- /dev/null +++ b/crmeb/crmeb/services/easywechat/Application.php @@ -0,0 +1,46 @@ + +// +---------------------------------------------------------------------- + +namespace crmeb\services\easywechat; + + +use crmeb\services\easywechat\oauth2\wechat\WechatOauth2Provider; +use crmeb\services\easywechat\wechatlive\ProgramProvider as LiveProgramProvider; + + +/** + * Class Application + * @package crmeb\services\easywechat + * @property LiveProgramProvider $wechat_live + * @property WechatOauth2Provider $oauth2 + */ +class Application extends \EasyWeChat\Foundation\Application +{ + + /** + * @var string[] + */ + protected $providersNew = [ + LiveProgramProvider::class, + WechatOauth2Provider::class + ]; + + /** + * Application constructor. + * @param $config + */ + public function __construct($config) + { + $this->providers = array_merge($this->providers, $this->providersNew); + parent::__construct($config); + } + +} diff --git a/crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth.php b/crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth.php new file mode 100644 index 000000000..0dcca66ff --- /dev/null +++ b/crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth.php @@ -0,0 +1,282 @@ + +// +---------------------------------------------------------------------- + +namespace crmeb\services\easywechat\oauth2\wechat; + +use Doctrine\Common\Cache\Cache; +use Doctrine\Common\Cache\FilesystemCache; +use EasyWeChat\Core\AbstractAPI; +use EasyWeChat\Core\AccessToken; +use EasyWeChat\Core\Exceptions\HttpException; +use EasyWeChat\Core\Http; +use EasyWeChat\Support\Collection; +use GuzzleHttp\Psr7\Uri; +use Psr\Http\Message\RequestInterface; +use Symfony\Component\HttpFoundation\Request; + +/** + * Class WechatOauth + * @package crmeb\services\easywechat\oauth\wechat + */ +class WechatOauth extends AbstractAPI +{ + /** + * 通过code获取网页授权access_token + */ + const API_OAUTH_ACCESS_TOKEN = 'https://api.weixin.qq.com/sns/oauth2/access_token'; + + /** + * 检验授权凭证(access_token)是否有效 + */ + const API_OAUTH_CHECK_TOKEN = 'https://api.weixin.qq.com/sns/auth'; + + /** + * 刷新access_token + */ + const API_OAUTH_REFRESH_TOKEN = 'https://api.weixin.qq.com/sns/oauth2/refresh_token'; + + /** + * 获取用户信息 + */ + const API_OAUTH_GET_USER_INFO = 'https://api.weixin.qq.com/sns/userinfo'; + + + /** + * App ID. + * + * @var string + */ + protected $appId; + + /** + * App secret. + * + * @var string + */ + protected $secret; + + /** + * Cache. + * + * @var Cache + */ + protected $cache; + + protected $openid; + + /** + * @var Request + */ + protected $request; + + /** + * Query name. + * + * @var string + */ + protected $queryName = 'access_token'; + + /** + * Response Json key name. + * + * @var string + */ + protected $tokenJsonKey = 'access_token'; + + + /** + * Response Json key name. + * + * @var string + */ + protected $refreshTokenJsonKey = 'refresh_token'; + + /** + * Cache key prefix. + * + * @var string + */ + protected $prefix = 'easywechat.common.oauth.access_token.'; + + /** + * WechatOauth constructor. + * @param AccessToken $accessToken + * @param $appId + * @param $appSecret + */ + public function __construct(AccessToken $accessToken, $appId, $appSecret) + { + parent::__construct($accessToken); + $this->appId = $appId; + $this->secret = $appSecret; + } + + /** + * @param Request $request + * @return $this + */ + public function setRequest(Request $request) + { + $this->request = $request; + + return $this; + } + + /** + * 获取code + * @return mixed + */ + public function getCode() + { + return $this->request->get('code'); + } + + /** + * 授权获取token + * @param string $code + * @return false|mixed + * @throws HttpException + */ + public function oauth(string $code = '') + { + $params = [ + 'appid' => $this->appId, + 'secret' => $this->secret, + 'code' => $code ?: $this->getCode(), + 'grant_type' => 'authorization_code', + ]; + + $http = new Http(); + + $token = $http->parseJSON($http->get(self::API_OAUTH_ACCESS_TOKEN, $params)); + + if (empty($token[$this->tokenJsonKey])) { + throw new HttpException('Request AccessToken fail. response: ' . json_encode($token, JSON_UNESCAPED_UNICODE)); + } + $this->setCache($token); + + return $token; + } + + /** + * 刷新token + * @param string $refresh_token + * @return false|mixed + * @throws HttpException + */ + public function refreshToken(string $refresh_token) + { + $params = [ + 'appid' => $this->appId, + 'refresh_token' => $refresh_token, + 'grant_type' => 'refresh_token', + ]; + + $http = new Http(); + + $token = $http->parseJSON($http->get(self::API_OAUTH_REFRESH_TOKEN, $params)); + + if (empty($token[$this->tokenJsonKey])) { + throw new HttpException('Request AccessToken fail. response: ' . json_encode($token, JSON_UNESCAPED_UNICODE)); + } + $this->setCache($token); + + return $token; + } + + /** + * 获取用户信息 + * @param $openId + * @param string $lang + * @return Collection|null + * @throws HttpException + */ + public function getUserInfo($openId, $lang = 'zh_CN') + { + $params = [ + 'openid' => $openId, + 'lang' => $lang, + ]; + $this->openid = $openId; + return $this->parseJSON('get', [self::API_OAUTH_GET_USER_INFO, $params]); + } + + /** + * 获取token + * @param false $forceRefresh + * @return bool|mixed|string + * @throws HttpException + */ + public function getToken($forceRefresh = false) + { + $cacheKey = $this->prefix; + $cached = $this->getCache()->fetch($cacheKey . $this->tokenJsonKey . $this->openid); + + if ($forceRefresh || !$cached) { + $refreshCached = $this->getCache()->fetch($cacheKey . $this->refreshTokenJsonKey . $this->openid); + if ($refreshCached) { + $token = $this->refreshToken($refreshCached); + + return $token[$this->tokenJsonKey]; + } + return ''; + } + + return $cached; + } + + /** + * 保存token信息 + * @param $token + * @return bool + */ + public function setCache($token) + { + $cacheKey = $this->prefix; + // XXX: T_T... 7200 - 1500 + $this->getCache()->save($cacheKey . $this->tokenJsonKey . $token['openid'], $token[$this->tokenJsonKey], $token['expires_in'] - 1500); + $this->getCache()->save($cacheKey . $this->refreshTokenJsonKey . $token['openid'], $token[$this->refreshTokenJsonKey], 30 * 24 * 3600); + return true; + } + + /** + * Return the cache manager. + * + * @return \Doctrine\Common\Cache\Cache + */ + public function getCache() + { + return $this->cache ?: $this->cache = new FilesystemCache(sys_get_temp_dir()); + } + + /** + * Attache access token to request query. + * + * @return \Closure + */ + protected function accessTokenMiddleware() + { + return function (callable $handler) { + return function (RequestInterface $request, array $options) use ($handler) { + $token = $this->getToken(); + if (!$token) { + return $handler($request, $options); + } + + $request = $request->withUri(Uri::withQueryValue($request->getUri(), $this->queryName, $token)); + + return $handler($request, $options); + }; + }; + } + + +} diff --git a/crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth2Provider.php b/crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth2Provider.php new file mode 100644 index 000000000..5803f0da5 --- /dev/null +++ b/crmeb/crmeb/services/easywechat/oauth2/wechat/WechatOauth2Provider.php @@ -0,0 +1,51 @@ + +// +---------------------------------------------------------------------- + +namespace crmeb\services\easywechat\oauth2\wechat; + + +use crmeb\services\SystemConfigService; +use Pimple\Container; +use Pimple\ServiceProviderInterface; +use think\facade\Request; + +/** + * 微信网页授权 + * Class WechatOauthProvider + * @package crmeb\services\easywechat\oauth\wechat + * @method oauth(string $code = '') code授权获取acces_token openid + * @method getUserInfo($openId, $lang = 'zh_CN') openid 获取用户信息 + * @method setRequest(Request $request) 设置request对象 + */ +class WechatOauth2Provider implements ServiceProviderInterface +{ + + /** + * + * @param Container $pimple + */ + public function register(Container $pimple) + { + $request = app('request'); + $wechat = SystemConfigService::more(['wechat_appid', 'wechat_app_appid', 'wechat_app_appsecret', 'wechat_appsecret']); + if ($request->isApp()) { + $appId = isset($wechat['wechat_app_appid']) ? trim($wechat['wechat_app_appid']) : ''; + $appsecret = isset($wechat['wechat_app_appsecret']) ? trim($wechat['wechat_app_appsecret']) : ''; + } else { + $appId = isset($wechat['wechat_appid']) ? trim($wechat['wechat_appid']) : ''; + $appsecret = isset($wechat['wechat_appsecret']) ? trim($wechat['wechat_appsecret']) : ''; + } + + $pimple['oauth2'] = function ($pimple) use ($appId, $appsecret) { + return new WechatOauth($pimple['access_token'], $appId, $appsecret); + }; + } +} diff --git a/crmeb/public/index.html b/crmeb/public/index.html index 7d7e71a10..917564549 100644 --- a/crmeb/public/index.html +++ b/crmeb/public/index.html @@ -1,2 +1,2 @@