feat: 添加微信应用模块,支持微信支付及微信小程序对接(功能产品已上线验证)

This commit is contained in:
橙子
2023-09-03 11:22:19 +08:00
parent efee87e4c5
commit c2ca0b1f29
21 changed files with 1264 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Module.WeChat.Model
{
public class AccessTokenResponse
{
public string access_token { get; set; }
public int expires_in { get; set; }
}
public class AccessTokenRequest
{
public string grant_type { get; set; }
public string appid { get; set; }
public string secret { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Module.WeChat.Abstract;
namespace Yi.Framework.Module.WeChat.Model
{
public class Code2SessionResponse: IErrorObjct
{
public string openid { get; set; }
public string session_key { get; set; }
public string unionid { get; set; }
public int errcode { get; set; }
public string errmsg { get; set; }
}
public class Code2SessionRequest
{
public string appid { get; set; }
public string secret { get; set; }
public string js_code { get; set; }
public string grant_type => "authorization_code";
}
public class Code2SessionInput
{
public Code2SessionInput(string js_code)
{
this.js_code=js_code;
}
public string js_code { get; set; }
}
}

View File

@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Module.WeChat.Model
{
public class JsApiInput {
/// <summary>
/// 商品描述
/// </summary>
public string description { get; set; }
/// <summary>
/// 商户订单号
/// </summary>
public string out_trade_no { get; set; }
/// <summary>
/// 订单金额
/// </summary>
public AmountItemRequest amount { get; set; }
/// <summary>
/// 支付者
/// </summary>
public PayerItemRequest payer { get; set; }
}
public class JsApiRequest
{
/// <summary>
/// 应用id
/// </summary>
public string appid { get; set; }
/// <summary>
/// 商户id
/// </summary>
public string mchid { get; set; }
/// <summary>
/// 商品描述
/// </summary>
public string description { get; set; }
/// <summary>
/// 商户订单号
/// </summary>
public string out_trade_no { get; set; }
/// <summary>
/// 回调通知地址
/// </summary>
public string notify_url { get; set; }
/// <summary>
/// 订单金额
/// </summary>
public AmountItemRequest amount { get; set; }
/// <summary>
/// 支付者
/// </summary>
public PayerItemRequest payer { get; set; }
}
public class AmountItemRequest
{
/// <summary>
/// 总金额
/// </summary>
public int total { get; set; }
}
public class PayerItemRequest
{
public string openid { get; set; }
}
public class JsApiResponse
{
/// <summary>
/// 预支付id
/// </summary>
public string prepay_id { get; set; }
}
}

View File

@@ -0,0 +1,288 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Furion;
namespace Yi.Framework.Module.WeChat.Model
{
/// <summary>
/// 接收的结果
/// </summary>
public class PayNoticeReponse
{
/// <summary>
/// 通知的唯一ID
/// </summary>
public string id { get; set; }
/// <summary>
/// 通知的资源数据类型支付成功通知为encrypt-resource
/// </summary>
public string create_time { get; set; }
/// <summary>
/// 通知的资源数据类型支付成功通知为encrypt-resource
/// </summary>
public string event_type { get; set; }
/// <summary>
/// 通知的资源数据类型支付成功通知为encrypt-resource
/// </summary>
public string resource_type { get; set; }
/// <summary>
/// 回调摘要
/// </summary>
public string summary { get; set; }
/// <summary>
/// 数据
/// </summary>
public Resource resource { get; set; }
}
/// <summary>
/// 通知的数据
/// </summary>
public class Resource
{
/// <summary>
/// 加密算法类型AEAD_AES_256_GCM
/// </summary>
public string algorithm { get; set; }
/// <summary>
/// 数据密文
/// </summary>
public string ciphertext { get; set; }
/// <summary>
/// 附加数据
/// </summary>
public string associated_data { get; set; }
/// <summary>
/// 原始回调类型为transaction
/// </summary>
public string original_type { get; set; }
/// <summary>
/// 随机串
/// </summary>
public string nonce { get; set; }
}
/// <summary>
/// 解密出来的结果
/// </summary>
public class PayNoticeResult
{
/// <summary>
/// 微信支付系统生成的订单号。
/// </summary>
public string transaction_id { get; set; }
/// <summary>
/// 订单金额信息
/// </summary>
public Amount amount { get; set; }
/// <summary>
/// 商户号
/// </summary>
public string mchid { get; set; }
/// <summary>
/*
交易状态,枚举值:
SUCCESS支付成功
REFUND转入退款
NOTPAY未支付
CLOSED已关闭
REVOKED已撤销付款码支付
USERPAYING用户支付中付款码支付
PAYERROR支付失败(其他原因,如银行返回失败)
*/
/// </summary>
public string trade_state { get; set; }
/// <summary>
/// 银行类型,采用字符串类型的银行标识。
/// </summary>
public string bank_type { get; set; }
/// <summary>
/// 优惠功能,享受优惠时返回该字段
/// </summary>
public List<PromotionDetail> promotion_detail { get; set; }
/// <summary>
/// 支付完成时间
/// </summary>
public string success_time { get; set; }
/// <summary>
/// 支付者信息
/// </summary>
public Payer payer { get; set; }
/// <summary>
/// 商户系统内部订单号只能是数字、大小写字母_-*且在同一个商户号下唯一。
/// 特殊规则最小字符长度为6
/// </summary>
public string out_trade_no { get; set; }
/// <summary>
/// 应用ID
/// </summary>
public string appid { get; set; }
/// <summary>
/// 交易状态描述
/// </summary>
public string trade_state_desc { get; set; }
/// <summary>
/* 交易类型,枚举值:
JSAPI公众号支付
NATIVE扫码支付
APPAPP支付
MICROPAY付款码支付
MWEBH5支付
FACEPAY刷脸支付
*/
/// </summary>
public string trade_type { get; set; }
/// <summary>
/*
* 银行类型,采用字符串类型的银行标识。
*/
/// </summary>
public string attach { get; set; }
/// <summary>
/// 支付场景信息描述
/// </summary>
public SceneInfo scene_info { get; set; }
}
public class Amount
{
/// <summary>
/// 用户支付金额,单位为分。
/// </summary>
public int payer_total { get; set; }
/// <summary>
/// 订单总金额,单位为分。
/// </summary>
public int total { get; set; }
/// <summary>
/// CNY人民币境内商户号仅支持人民币。
/// </summary>
public string currency { get; set; }
/// <summary>
/// 用户支付币种
/// </summary>
public string payer_currency { get; set; }
}
public class GoodsDetail
{
/// <summary>
/// 商品备注
/// </summary>
public string goods_remark { get; set; }
/// <summary>
/// 商品编码
/// </summary>
public int quantity { get; set; }
/// <summary>
/// 商品优惠金额
/// </summary>
public int discount_amount { get; set; }
/// <summary>
/// 商品编码
/// </summary>
public string goods_id { get; set; }
/// <summary>
/// 商品单价
/// </summary>
public int unit_price { get; set; }
}
public class PromotionDetail
{
/// <summary>
/// 单品列表
/// </summary>
public int amount { get; set; }
/// <summary>
/// 微信出资
/// </summary>
public int wechatpay_contribute { get; set; }
/// <summary>
/// 券ID
/// </summary>
public string coupon_id { get; set; }
public string scope { get; set; }
public int merchant_contribute { get; set; }
/// <summary>
/// 优惠名称
/// </summary>
public string name { get; set; }
/// <summary>
/// 其他出资
/// </summary>
public int other_contribute { get; set; }
/// <summary>
/// currency
/// </summary>
public string currency { get; set; }
/// <summary>
/// 活动ID
/// </summary>
public string stock_id { get; set; }
/// <summary>
/// 单品列表
/// </summary>
public List<GoodsDetail> goods_detail { get; set; }
}
public class Payer
{
/// <summary>
/// 用户标识
/// </summary>
public string openid { get; set; }
}
public class SceneInfo
{
/// <summary>
/// 商户端设备号
/// </summary>
public string device_id { get; set; }
}
}

View File

@@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Module.WeChat.Abstract;
namespace Yi.Framework.Module.WeChat.Model
{
public class UniformMessageRequest
{
/// <summary>
///用户openid可以是小程序的openid也可以是mp_template_msg.appid对应的公众号的openid
/// </summary>
public string touser { get; set; }
/// <summary>
/// 小程序消息模板
/// </summary>
public WeappTemplateMsg weapp_template_msg { get; set; } = new WeappTemplateMsg();
/// <summary>
/// 公众号模板
/// </summary>
public MpTemplateMsg mp_template_msg { get; set; } = new MpTemplateMsg();
}
public class UniformMessageInput
{
/// <summary>
///用户openid可以是小程序的openid也可以是mp_template_msg.appid对应的公众号的openid
/// </summary>
public string touser { get; set; }
/// <summary>
/// 小程序消息模板
/// </summary>
public WeappTemplateMsg? weapp_template_msg { get; set; }
/// <summary>
/// 公众号模板
/// </summary>
public MpTemplateMsg? mp_template_msg { get; set; }
}
public class UniformMessageResponse : IErrorObjct
{
public int errcode { get; set; }
public string errmsg { get; set; }
}
/// <summary>
/// 小程序消息
/// </summary>
public class WeappTemplateMsg
{
/// <summary>
/// 模板id
/// </summary>
public string template_id { get; set; }
/// <summary>
/// 小程序页面
/// </summary>
public string page { get; set; }
/// <summary>
/// 小程序模板消息formid
/// </summary>
public string form_id { get; set; }
/// <summary>
/// 小程序模板放大关键词
/// </summary>
public string emphasis_keyword { get; set; }
/// <summary>
/// 模板数据
/// </summary>
public string data { get; set; }
}
/// <summary>
/// 公众号消息通知
/// </summary>
public class MpTemplateMsg
{
/// <summary>
/// 公众号appid要求与小程序有绑定且同主体
/// </summary>
public string appid { get; set; }
/// <summary>
/// 公众号模板id
/// </summary>
public string template_id { get; set; }
/// <summary>
///公众号模板消息所要跳转的url
/// </summary>
public string url { get; set; }
/// <summary>
/// 公众号模板消息所要跳转的小程序,小程序的必须与公众号具有绑定关系
/// </summary>
public Miniprogram miniprogram { get; set; }
/// <summary>
/// 公众号模板消息的数据
/// </summary>
public Dictionary<string, keyValueItem> data { get; set; }
}
/// <summary>
/// 小程序跳转
/// </summary>
public class Miniprogram
{
public string appid { get; set; }
public string pagepath { get; set; }
}
public class keyValueItem
{
public string value { get; set; }
public string color { get; set; }
}
}

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Module.WeChat.Model
{
public class UnlimitedQRCodeReponse
{
}
public class UnlimitedQRCodeRequest
{
public UnlimitedQRCodeRequest(EnvVersionEnum unlimitedQRCodeEnum) {
env_version = unlimitedQRCodeEnum.ToString();
}
public bool check_path { get; set; } = false;
public string page { get; set; }
public string scene { get; set; }
public string env_version { get; set; }
}
public enum EnvVersionEnum
{
/// <summary>
/// 正式版本
/// </summary>
[Description("正式版本")]
release,
/// <summary>
/// 体验版本
/// </summary>
[Description("体验版本")]
trial,
/// <summary>
/// 开发版本
/// </summary>
[Description("开发版本")]
develop
}
}