.net core 微信小程序/公众号之微信支付

       最近在为公司做个有关于公益的微信小程序,说实在话做小程序我还是第一次。对于小程序怎么开发一窍不通,那能怎么办呢?只能肯文档呗!刚开始啥都不懂,只能边看文档边问人,不过还好没什么难点,看了一个下午,第二天就开始动手了。

       不过好在我只是写后端接口而已,开发这个的难点在于微信支付这一块,没接触过,有点不知道怎么下手!那继续肯文档吧!还好支付这一块写两个接口就行了,一个是微信支付接口(也就是:统一下单接口),另一个则是微信支付回调接口。

       废话不多说赶紧上码,才是王道!!!

       第一个:微信支付接口

    /// <summary>
    /// 微信支付
    /// </summary>
    [Route("api/[controller]")]
    public class WechatPayController : Controller
    {      
        private IHttpContextAccessor _accessor;
        
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="accessor"></param>
        public WechatPayController(IHttpContextAccessor accessor)
        {
             _accessor = accessor;
        }

        /// <summary>
        /// 微信支付
        /// </summary>
        /// <param name="temp"></param>
        /// <returns></returns>
        /// <response code="200">微信下单成功</response>
        /// <response code="600"></response>
        /// <response code="601">微信下单失败</response>
        [HttpPost]
        [Route("GetUnifiedOrderResult")]
        public CommonResult<OrderResult> GetUnifiedOrderResult([FromBody] GetUnifiedOrderResult temp)
        {
            var result = new CommonResult<OrderResult>();

            /*
                 可以在这里执行一些自己的逻辑代码
            */

            //统一下单
            WxPayData data = new WxPayData();
            data.SetValue("body", "某某某");
            data.SetValue("attach",  temp.GYID.ToString());
            data.SetValue("out_trade_no", GenerateOutTradeNo());
            //data.SetValue("total_fee", re.Price.ToString());//支付金额 /分
            data.SetValue("total_fee", "1");
            var timeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");
            data.SetValue("time_start", timeStamp);
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            //data.SetValue("goods_tag", "test");//订单优惠标记
            data.SetValue("trade_type", "JSAPI");//交易类型
            data.SetValue("openid", user.Openid);
            data.SetValue("notify_url", WxConfig.NOTIFY_URL);
            WxPayData wxdata = UnifiedOrder(data);
            if (!wxdata.IsSet("appid") || !wxdata.IsSet("prepay_id") || wxdata.GetValue("prepay_id").ToString() == "")
            {
                result.scode = "601";
                result.remark = "微信下单失败";
                return result;
            }
            wxdata.GetValue("appid");
            result.scode = "200";
            result.remark = "微信下单成功";
            OrderResult or = new OrderResult();
            string nodestr = wxdata.GetValue("nonce_str").ToString();
            string prepay_id = wxdata.GetValue("prepay_id").ToString();
            string paySign = GetPaySign(timeStamp, nodestr, prepay_id);
            or.TimeStamp = timeStamp;
            or.Err_code = wxdata.IsSet("err_code") ? wxdata.GetValue("err_code").ToString() : "";
            or.Err_code_des = wxdata.IsSet("err_code_des") ? wxdata.GetValue("err_code_des").ToString() : "";
            or.PaySign = paySign;
            or.Return_code = wxdata.GetValue("return_code").ToString();
            or.Return_msg = wxdata.GetValue("return_msg").ToString();
            or.Appid = wxdata.GetValue("appid").ToString();
            or.Prepay_id = prepay_id;
            or.NonceStr = nodestr;
            result.result = or;
            return result;
        }
        /**
        * 
        * 统一下单
        * @param WxPaydata inputObj 提交给统一下单API的参数
        * @param int timeOut 超时时间
        * @throws WxPayException
        * @return 成功时返回,其他抛异常
        */
        private WxPayData UnifiedOrder(WxPayData inputObj)
        {
            string url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
            //检测必填参数
            if (!inputObj.IsSet("out_trade_no"))
            {
                throw new WxPayException("缺少统一支付接口必填参数out_trade_no!");
            }
            else if (!inputObj.IsSet("body"))
            {
                throw new WxPayException("缺少统一支付接口必填参数body!");
            }
            else if (!inputObj.IsSet("total_fee"))
            {
                throw new WxPayException("缺少统一支付接口必填参数total_fee!");
            }
            else if (!inputObj.IsSet("trade_type"))
            {
                throw new WxPayException("缺少统一支付接口必填参数trade_type!");
            }

            //关联参数
            if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid"))
            {
                throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
            }
            if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id"))
            {
                throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
            }

         
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值