移动系统liao
2025-05-01 a247547df86f0fad8f03aebb91de68d3f2bc7918
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using EzCoreNet.Redis;
using Furion;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Microsoft.Extensions.Options;
using SKIT.FlurlHttpClient.Wechat.Api;
using SKIT.FlurlHttpClient.Wechat.Api.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
 
 
namespace EzWechat
{
 
    public class WechatService:IWechatService ,IScoped
    {
        private readonly WechatApiClient _client;
        private readonly IEzCoreNetRedisService _redisService;
 
        public WechatService(IEzCoreNetRedisService ezCoreNetRedis) {
 
            /* 以公众号获取用户信息接口为例 */
            var request = new WechatApiClientOptions()
            {
                AppId = App.Configuration["WechatAPP:AppId"],
                AppSecret = App.Configuration["WechatAPP:AppSecret"],
                Timeout=3000,
 
                //ImmeDeliveryAppKey = "即时配送相关服务 AppKey,不用则不填",
                //ImmeDeliveryAppSecret = "即时配送相关服务 AppSecret,不用则不填",
                //VirtualPaymentAppKey = "虚拟支付相关服务 AppKey,不用则不填",
                //MidasOfferId = "米大师 1.0 相关服务 OfferId,不用则不填",
                //MidasAppKey = "米大师 1.0 相关服务 AppKey,不用则不填",
                //MidasOfferIdV2 = "米大师 2.0 相关服务 OfferId,不用则不填",
                //MidasAppKeyV2 = "米大师 2.0 相关服务 AppKey,不用则不填"
            };
            _client = WechatApiClientBuilder.Create(request).Build();
            
            _redisService = ezCoreNetRedis;
 
 
        }
 
        public async Task<string> GetOpenID(string jscode)
        {
        
            var reques = new SnsJsCode2SessionRequest()
            {
            
                 
               
              
                JsCode = jscode
            };
          var a= await _client.ExecuteSnsJsCode2SessionAsync(reques);
            if(a.IsSuccessful())
            {
                return a.OpenId;
            }
            else
            {
                throw Oops.Oh($"{a.ErrorCode}+++{a.ErrorMessage}");
            }
        }
        public async Task<string> GetPhone( string bindgetphonenumber)
        {
 
 
            var requs = new WxaBusinessGetUserPhoneNumberRequest()
            {
                AccessToken = await GetAccessToken(),
                 Code= bindgetphonenumber
 
 
 
            };
            var a= await _client.ExecuteWxaBusinessGetUserPhoneNumberAsync(requs);
            if (a.IsSuccessful())
                return a.PhoneInfo.PurePhoneNumber;
            else
            {
                throw Oops.Oh($"{a.ErrorCode}+++{a.ErrorMessage}");
            }
        }
        /// <summary>
        /// 获取AccToken
        /// </summary>
        /// <returns></returns>
         private  async Task<string> GetAccessToken()
        {
            string key = _redisService.Get<string>("WxAccessToken");
            if(string.IsNullOrEmpty(key))
            {
               var a  =  await  _client.ExecuteCgibinTokenAsync(new CgibinTokenRequest { });
                if(!a.IsSuccessful())
                {
                    throw Oops.Oh($"{a.ErrorCode}+++{a.ErrorMessage}");
                }
                key=a.AccessToken;
                 _redisService.Add<string>("WxAccessToken", a.AccessToken, 7000);
            }
            return key;
        }
 
 
 
 
 
 
 
 
 
 
    }
 
  
}