.Net 微信支付集成

关于.NET微信支付集成的记录

闲来无事集成一下微信支付,涉及到 pc端支付、小程序、H5、公众号内部支付等。
因此特意封装了一个类库,这里简单记录一下。
类库名:Yi.WeiXin.Pay
里面集成了请求http的一个框架:Flurl.Http
注:Flurl也集成了微信支付的功能,功能更全、更强大,我这个只是简单的几个支付。200行代码左右,体积小。

直接上nuget就可以搜到。
在这里插入图片描述
安装好之后,引入

using Yi.WeiXin.Pay;
using Yi.WeiXin.Pay.Model;

主要是涉及到三个实体类:

new WxPayParamIn();//微信支付需要传递的参数所对应实体类
new WxPayApiResult();//请求成功后,微信官方返回的数据。
new WxSignParam();//商户信息

下面是三个类的具体信息
WxPayParamIn

	/// <summary>
    /// 根据开发者文档,构建微信支付相关参数对应类
    /// </summary>
    public class WxPayParamIn
    {
        /// <summary>
        /// 商户号
        /// </summary>
        public string? mchid { get; set; }

        /// <summary>
        /// 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一[6,32]
        /// </summary>
        public string? out_trade_no { get; set; }

        /// <summary>
        /// 公众号 或者 小程序的appID 视情况而定
        /// </summary>
        public string? appid { get; set; }

        /// <summary>
        /// 商品描述
        /// </summary>
        public string? description { get; set; }

        /// <summary>
        /// 支付成功后,回调地址
        /// </summary>
        public string? notify_url { get; set; }

        /// <summary>
        /// 价格
        /// </summary>
        public Amount? amount { get; set; }

        /// <summary>
        /// 附加信息
        /// </summary>
        public string? attach { get; set; }

        /// <summary>
        /// 小程序 和 JSAPI 特有属性 添加标题当属性值为null  转json时自动忽略当前当前属性
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public Payer? payer { get; set; }

        /// <summary>
        ///H5特有 场景 添加标记当属性值为null  转json时自动忽略当前属性
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public Scene_info? scene_info { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    public class Amount
    {
        /// <summary>
        /// 单位 分
        /// </summary>
        public int total { get; set; }
    }

    /// <summary>
    /// 
    /// </summary>
    public class Payer
    {
        /// <summary>
        /// 用户的openid 
        /// </summary>
        public string? openid { get; set; }
    }

    /// <summary>
    /// 
    /// </summary>
    public class Scene_info
    {
        /// <summary>
        /// 客户端的IP
        /// </summary>
        public string? payer_client_ip;

        /// <summary>
        ///H5支付详细信息
        /// </summary>
        public H5Info? h5_info;
    }

    /// <summary>
    /// 
    /// </summary>
    public class H5Info
    {
        /// <summary>
        /// 设备类型;IOS 或 Android
        /// </summary>
        public string? type { get; set; }
    }


    /// <summary>
    /// 
    /// </summary>
    public class WxPayApiResult
    {
        /// <summary>
        /// 调用微信支付的链接,制作成二维码,可以实现扫码直接。或在微信直接点开,可直接支付;
        /// </summary>
        public string? code_url { get; set; }

        /// <summary>
        /// 预支付凭证,调起微信支付的凭证
        /// </summary>
        public string? prepay_id { get; set; }

        /// <summary>
        /// H5支付链接
        /// </summary>
        public string? h5_url { get; set; }

    }

WxSignParam

 /// <summary>
    /// 商户签名信息
    /// </summary>
    public class WxSignParam
    {
        /// <summary>
        /// 商户密钥
        /// </summary>
        public string? PrivateKey { get; set; }

        /// <summary>
        /// 商户号
        /// </summary>
        public string? MerchantId { get; set; }

        /// <summary>
        /// 证书序列号
        /// </summary>
        public string? CertificateSerialNo { get; set; }

        /// <summary>
        /// 商户公钥
        /// </summary>
        public string? PublicKey { get; set; }

        /// <summary>
        /// 回调地址
        /// </summary>
        public string? NotifyUrl { get; set; }
    }

WxPayApiResult

 public class WxPayApiResult
    {
        /// <summary>
        /// 调用微信支付的链接,制作成二维码,可以实现扫码直接。或在微信直接点开,可直接支付;
        /// </summary>
        public string? code_url { get; set; }

        /// <summary>
        /// 预支付凭证,调起微信支付的凭证
        /// </summary>
        public string? prepay_id { get; set; }

        /// <summary>
        /// H5支付链接
        /// </summary>
        public string? h5_url { get; set; }
    }

具体使用细节

具体使用:PC端↓↓↓

//生成订单号
            var orderNo = DateTime.Now.Ticks;
            WxPayParamIn wxPayParamIn = new WxPayParamIn
            {
                //公众号的appID
                appid = "xxxxxxxxxxxxxx",

                //商户号
                mchid = ycteOptions.MerchantId,

                //商品描述
                description = "商品",

                //订单号 唯一 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
                out_trade_no = orderNo.ToString(),

                //回调地址
                notify_url = ycteOptions.NotifyUrl
            };

            //商品价格
            Amount amount = new Amount
            {
                total = 1//单位分
            };
            wxPayParamIn.amount = amount;

            //自定义的附加信息,会在回调接口出,带着出来。
            wxPayParamIn.attach = "这是附加信息";

            //请求微信支付API
            var codeUrl = await YiWxPay.WxPayPCAsync(wxSignParam, wxPayParamIn);

具体使用:小程序支付↓↓↓

//生成订单号
            var orderNo = DateTime.Now.Ticks;
            //和Jsapi 一样 可以使用 WxPayParamJsapiIn
            WxPayParamIn wxPayParamIn = new WxPayParamIn
            {
                //小程序的appID *****不同于公众号内部支付*****
                appid = "xxxxxxxxxxxxxx",

                //商户号
                mchid = ycteOptions.MerchantId,

                //商品描述
                description = "商品描述",

                //订单号
                out_trade_no = orderNo.ToString(),

                //回调地址
                notify_url = ycteOptions.NotifyUrl
            };

            //商品价格
            Amount amount = new Amount
            {
                total = 1//单位分
            };
            wxPayParamIn.amount = amount;

            //自定义的附加信息,会在回调接口出,带着出来。
            wxPayParamIn.attach = "这是附加信息";

            //微信小程序用户的openid *****不同于公众号内部支付*****
            var payer = new Payer
            {
                openid = "用户的openId"
            };
            wxPayParamIn.payer = payer;
            //请求微信支付API
            var prepay_id = await YiWxPay.WxPayMiniAsync(wxSignParam, wxPayParamIn);

具体使用:H5支付

 //生成订单号
            var orderNo = DateTime.Now.Ticks;
            WxPayParamIn wxPayParamIn = new WxPayParamIn
            {
                //公众号的appID
                appid = "xxxxxxxxx",

                //商户号
                mchid = ycteOptions.MerchantId,

                //商品描述
                description = "商品描述",

                //订单号
                out_trade_no = orderNo.ToString(),

                //回调地址
                notify_url = ycteOptions.NotifyUrl
            };

            //商品价格
            Amount amount = new()
            {
                total = 1//单位分
            };
            wxPayParamIn.amount = amount;

            //自定义的附加信息,会在回调接口出,带着出来。
            wxPayParamIn.attach = "这是附加信息";

            var scene_Info = new Scene_info
            {
                payer_client_ip = "192.168.0.1"//真实客户端IP 
            };
            var h5_Info = new H5Info
            {
                type = "IOS"//场景类型 示例值:iOS, Android, Wap
            };
            scene_Info.h5_info = h5_Info;
            wxPayParamIn.scene_info = scene_Info;
            //请求微信支付API
            var h5_url = await YiWxPay.WxPayH5Async(wxSignParam, wxPayParamIn);

具体使用:公众号内部支付

 //生成订单号
            var orderNo = DateTime.Now.Ticks;
            WxPayParamIn wxPayParamIn = new WxPayParamIn
            {
                //公众号的appID
                appid = "xxxxxxxxxxxxx",

                //商户号
                mchid = ycteOptions.MerchantId,

                //商品描述
                description = "商品描述",

                //订单号
                out_trade_no = orderNo.ToString(),

                //回调地址
                notify_url = ycteOptions.NotifyUrl
            };

            //商品价格
            Amount amount = new Amount
            {
                total = 1//单位分
            };
            wxPayParamIn.amount = amount;

            //自定义的附加信息,会在回调接口出,带着出来。
            wxPayParamIn.attach = "这是附加信息";

            //微信用户的openid
            var payer = new Payer
            {
                openid = "用户的openId"
            };
            wxPayParamIn.payer = payer;
            //请求微信支付API
            var prepay_id = await YiWxPay.WxPayJsApiAsync(wxSignParam, wxPayParamIn);

请求完成之后,返回的参数,可以根据个人的业务需求,进行处理。
如:

pc端支付返回的是一个类似链接的东西,将其制作成二维码,通过微信扫描次二维码,即可直接跳转至维系内支付页面。
h5端支付返回的是一个h5的支付链接链接,在H5页面直接跳转到次链接会自动调起微信支付。注意:苹果手机自带的浏览器似乎不行。
小程序和公众号内部支付都是返回一个预支付凭证,由前端拿着此凭证通过微信提供的jsapi 调起微信支付。

就记录到这里吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值