微信小程序支付
1、背景
因业务需要接入微信支付功能(客户端是微信小程序),因公司服务器版本较低,服务端采用.Net Framework 版本(并采用盛派微信SDK)
2、文档地址
1)小程序支付:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1
2)小程序调起支付API:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
3)支付下单:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
4)发起微信支付:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html
5)盛派SDK:http://sdk.weixin.senparc.com/
3、代码实现
小程序支付的交互图如下:
3.1 服务端实现
1)引入包:
2)注册:在 Global.asmx 里进行注册
/* * CO2NET 全局注册开始 * 建议按照以下顺序进行注册 */ /* * CO2NET 是从 Senparc.Weixin 分离的底层公共基础模块,经过了长达 6 年的迭代优化。 * 关于 CO2NET 在所有项目中的通用设置可参考 CO2NET 的 Sample: * https://github.com/Senparc/Senparc.CO2NET/blob/master/Sample/Senparc.CO2NET.Sample.netcore/Startup.cs */ //设置全局 Debug 状态 var isGLobalDebug = true; //全局设置参数,将被储存到 Senparc.CO2NET.Config.SenparcSetting var senparcSetting = SenparcSetting.BuildFromWebConfig(isGLobalDebug); //也可以通过这种方法在程序任意位置设置全局 Debug 状态: //Senparc.CO2NET.Config.IsDebug = isGLobalDebug; //CO2NET 全局注册,必须!! IRegisterService register = RegisterService.Start(senparcSetting).UseSenparcGlobal(); #region 全局缓存配置(按需) #region 配置和使用 Redis -- DPBMARK Redis //配置全局使用Redis缓存(按需,独立) var redisConfigurationStr = senparcSetting.Cache_Redis_Configuration; var useRedis = !string.IsNullOrEmpty(redisConfigurationStr) && redisConfigurationStr != "Redis配置"; if (useRedis)//这里为了方便不同环境的开发者进行配置,做成了判断的方式,实际开发环境一般是确定的,这里的if条件可以忽略 { /* 说明: * 1、Redis 的连接字符串信息会从 Config.SenparcSetting.Cache_Redis_Configuration 自动获取并注册,如不需要修改,下方方法可以忽略 /* 2、如需手动修改,可以通过下方 SetConfigurationOption 方法手动设置 Redis 链接信息(仅修改配置,不立即启用) */ Senparc.CO2NET.Cache.Redis.Register.SetConfigurationOption(redisConfigurationStr); //以下会立即将全局缓存设置为 Redis Senparc.CO2NET.Cache.Redis.Register.UseKeyValueRedisNow();//键值对缓存策略(推荐) //Senparc.CO2NET.Cache.Redis.Register.UseHashRedisNow();//HashSet储存格式的缓存策略 //也可以通过以下方式自定义当前需要启用的缓存策略 //CacheStrategyFactory.RegisterObjectCacheStrategy(() => RedisObjectCacheStrategy.Instance);//键值对 //CacheStrategyFactory.RegisterObjectCacheStrategy(() => RedisHashSetObjectCacheStrategy.Instance);//HashSet } //如果这里不进行Redis缓存启用,则目前还是默认使用内存缓存 #endregion // DPBMARK_END #region 配置和使用 Memcached -- DPBMARK Memcached //配置Memcached缓存(按需,独立) var memcachedConfigurationStr = senparcSetting.Cache_Memcached_Configuration; var useMemcached = !string.IsNullOrEmpty(memcachedConfigurationStr) && memcachedConfigurationStr != "Memcached配置"; if (useMemcached) //这里为了方便不同环境的开发者进行配置,做成了判断的方式,实际开发环境一般是确定的,这里的if条件可以忽略 { /* 说明: * 1、Memcached 的连接字符串信息会从 Config.SenparcSetting.Cache_Memcached_Configuration 自动获取并注册,如不需要修改,下方方法可以忽略 /* 2、如需手动修改,可以通过下方 SetConfigurationOption 方法手动设置 Memcached 链接信息(仅修改配置,不立即启用) */ Senparc.CO2NET.Cache.Memcached.Register.SetConfigurationOption(memcachedConfigurationStr); //以下会立即将全局缓存设置为 Memcached Senparc.CO2NET.Cache.Memcached.Register.UseMemcachedNow(); //也可以通过以下方式自定义当前需要启用的缓存策略 CacheStrategyFactory.RegisterObjectCacheStrategy(() =&