微信官方文档 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95) 中只提供了 *c++*、*Node*、*PHP*、*Python* 四种语言的示例代码。
本文中的示例是基于 *.NET Core 2.2* 的 *C#* 语言版本。
### 1. 安装所需包
用到了 *Json* 的反序列化,需要额外安装 *Newtonsoft.Json* 包。
```powershell
Install-Package Newtonsoft.Json -Version 12.0.2
```
### 2. 创建解密后数据所需的模型
这里以[获取用户手机号码](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html)的返回值为例。
*WXGetPhoneNumberResult.cs*
```csharp
namespace WXBizDataCryptSample
{
///
/// 微信获取手机号结果模型
///
public class WXGetPhoneNumberResult : WXBaseWatermarkResult
{
///
/// 用户绑定的手机号(国外手机号会有区号)
///
public string PhoneNumber { get; set; }
///
/// 没有区号的手机号
///
public string PurePhoneNumber { get; set; }
///
/// 区号
///
public string CountryCode { get; set; }
}
}
```
*WXBaseWatermarkResult.cs*
```csharp
namespace WXBizDataCryptSample
{
///
/// 微信结果基类
///
public class WXBaseWatermarkResult
{
///
/// 水印
///
public WXWatermark Watermark { get; set; }
}
}
```
*WXWatermark.cs*
其中 *Appid* 因为不想被前端获知,所以添加了 *JsonIgnore* 特性。
但是反序列化解密后的结果时还是需要该字段的,