feat: 添加微信应用模块,支持微信支付及微信小程序对接(功能产品已上线验证)
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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:扫码支付
|
||||
APP:APP支付
|
||||
MICROPAY:付款码支付
|
||||
MWEB:H5支付
|
||||
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; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user