微信小程序支付C#后端源码

本文实例为大家分享了微信小程序支付C#后端源码,供大家参考,具体内容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Xml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Mvc_vue.Controllers
{
  public class wxController : Controller
  {
    //
    // GET: /wx/

    public ActionResult Index()
    {
      return View();
    }
    //所需值
    public static string _appid = "wxd930ea5d5a258f4f";
    public static string _mch_id = "10000100";
    public static string _key = "192006250b4c09247ec02edce69f6a2d";

    //模拟wx统一下单 openid(前台获取)
    public string getda(string openid)
    {
      return Getprepay_id(_appid, "shanghaifendian", "monixiaofei", _mch_id, GetRandomString(30), "http://www.weixin.qq.com/wxpay/pay.php", openid, getRandomTime(), 1);

    }

    //微信统一下单获取prepay_id & 再次签名返回数据
    private static string Getprepay_id(string appid, string attach, string body, string mch_id, string nonce_str, string notify_url, string openid, string bookingNo, int total_fee)
    {
      var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信统一下单请求地址
      string strA = "appid=" + appid + "&attach=" + attach + "&body=" + body + "&mch_id=" + mch_id + "&nonce_str=" + nonce_str + "&notify_url=" + notify_url + "&openid=" + openid + "&out_trade_no=" + bookingNo + "&spbill_create_ip=61.50.221.43&total_fee=" + total_fee + "&trade_type=JSAPI";
      string strk = strA + "&key="+_key; //key为商户平台设置的密钥key(假)
      string strMD5 = MD5(strk).ToUpper();//MD5签名

      //string strHash=HmacSHA256("sha256",strmd5).ToUpper();  //签名方式只需一种(MD5 或 HmacSHA256   【支付文档需仔细看】)

      //签名
      var formData = "<xml>";
      formData += "<appid>" + appid + "</appid>";//appid
      formData += "<attach>" + attach + "</attach>"; //附加数据(描述)
      formData += "<body>" + body + "</body>";//商品描述
      formData += "<mch_id>" + mch_id + "</mch_id>";//商户号
      formData += "<nonce_str>" + nonce_str + "</nonce_str>";//随机字符串,不长于32位。
      formData += "<notify_url>" + notify_url + "</notify_url>";//通知地址
      formData += "<openid>" + openid + "</openid>";//openid
      formData += "<out_trade_no>" + bookingNo + "</out_trade_no>";//商户订单号  --待
      formData += "<spbill_create_ip>61.50.221.43</spbill_create_ip>";//终端IP --用户ip
      formData += "<total_fee>" + total_fee + "</total_fee>";//支付金额单位为(分)
      formData += "<trade_type>JSAPI</trade_type>";//交易类型(JSAPI--公众号支付)
      formData += "<sign>" + strMD5 + "</sign>"; //签名
      formData += "</xml>";

      //请求数据
      var getdata = sendPost(url, formData);

      //获取xml数据
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(getdata);
      //xml格式转json
      string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);

      JObject jo = (JObject)JsonConvert.DeserializeObject(json);
      string prepay_id = jo["xml"]["prepay_id"]["#cdata-section"].ToString();

      //时间戳
      string _time = getTime().ToString();

      //再次签名返回数据至小程序
      string strB = "appId=" + appid + "&nonceStr=" + nonce_str + "&package=prepay_id=" + prepay_id + "&signType=MD5&timeStamp=" + _time + "&key="_key;

      wx w = new wx();
      w.timeStamp = _time;
      w.nonceStr = nonce_str;
      w.package = "prepay_id=" + prepay_id;
      w.paySign = MD5(strB).ToUpper(); ;
      w.signType = "MD5";

      //向小程序发送json数据
       return JsonConvert.SerializeObject(w);
    }

    /// <summary>
    /// 生成随机串
    /// </summary>
    /// <param name="length">字符串长度</param>
    /// <returns></returns>
    private static string GetRandomString(int length)
    {
      const string key = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
      if (length < 1)
        return string.Empty;

      Random rnd = new Random();
      byte[] buffer = new byte[8];

      ulong bit = 31;
      ulong result = 0;
      int index = 0;
      StringBuilder sb = new StringBuilder((length / 5 + 1) * 5);

      while (sb.Length < length)
      {
        rnd.NextBytes(buffer);

        buffer[5] = buffer[6] = buffer[7] = 0x00;
        result = BitConverter.ToUInt64(buffer, 0);

        while (result > 0 && sb.Length < length)
        {
          index = (int)(bit & result);
          sb.Append(key[index]);
          result = result >> 5;
        }
      }
      return sb.ToString();
    }

    /// <summary>
    /// 获取时间戳
    /// </summary>
    /// <returns></returns>
    private static long getTime()
    {
      TimeSpan cha = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)));
      long t = (long)cha.TotalSeconds;
      return t;
    }

    /// <summary>
    /// MD5签名方法
    /// </summary>
    /// <param name="inputText">加密参数</param>
    /// <returns></returns>
    private static string MD5(string inputText)
    {
      MD5 md5 = new MD5CryptoServiceProvider();
      byte[] fromData = System.Text.Encoding.UTF8.GetBytes(inputText);
      byte[] targetData = md5.ComputeHash(fromData);
      string byte2String = null;

      for (int i = 0; i < targetData.Length; i++)
      {
        byte2String += targetData[i].ToString("x2");
      }

      return byte2String;
    }
    /// <summary>
    /// HMAC-SHA256签名方式
    /// </summary>
    /// <param name="message"></param>
    /// <param name="secret"></param>
    /// <returns></returns>
    private static string HmacSHA256(string message, string secret)
    {
      secret = secret ?? "";
      var encoding = new System.Text.UTF8Encoding();
      byte[] keyByte = encoding.GetBytes(secret);
      byte[] messageBytes = encoding.GetBytes(message);
      using (var hmacsha256 = new HMACSHA256(keyByte))
      {
        byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
        return Convert.ToBase64String(hashmessage);
      }
    }

    /// <summary>
    /// wx统一下单请求数据
    /// </summary>
    /// <param name="URL">请求地址</param>
    /// <param name="urlArgs">参数</param>
    /// <returns></returns>
    private static string sendPost(string URL, string urlArgs)
    {
      //context.Request["args"]
      System.Net.WebClient wCient = new System.Net.WebClient();
      wCient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
      byte[] postData = System.Text.Encoding.ASCII.GetBytes("body=" + urlArgs);

      byte[] responseData = wCient.UploadData(URL, "POST", postData);

      string returnStr = System.Text.Encoding.UTF8.GetString(responseData);//返回接受的数据
      return returnStr;202     }

    /// <summary>
    /// 生成订单号
    /// </summary>
    /// <returns></returns>
    private static string getRandomTime()
    {
      Random rd = new Random();//用于生成随机数
      string DateStr = DateTime.Now.ToString("yyyyMMddHHmmssMM");//日期
      string str = DateStr + rd.Next(10000).ToString().PadLeft(4, '0');//带日期的随机数
      return str;
    }

  }
}

使用的是MVC .NET Framework4

微信小程序支付前端源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#微信小程序服务端获取用户解密信息实例代码

     C#微信小程序服务端获取用户解密信息实例代码 实现代码: using AIOWeb.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace AIOWe

  • C#开发之微信小程序发送模板消息功能

    步骤一:获取模板ID 有两个方法可以获取模版ID 通过模版消息管理接口获取模版ID 在微信公众平台手动配置获取模版ID 步骤二:页面的 <form/> 组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息.或者当用户完成支付行为,可以获取prepay_id用于发送模板消息. 步骤三:调用接口下发模板消息 今天重要的说第三步怎么实现,前面的步骤比较简单就略过. ----------------------------

  • 微信小程序支付之c#后台实现方法

    微信小程序支付c#后台实现 今天为大家带来比较简单的支付后台处理 首先下载官方的c#模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在WxPayAPI项目目录中添加两个"一般处理程序" (改名为GetOpenid.ashx.pay.ashx) 之后打开business目录下的JsApiPay.cs,在JsApiPay.cs中修改如下两处 然后在GetOpenid.ashx中加入代码如下: public class GetOpenid : IHttpHandler

  • 微信小程序支付C#后端源码

    本文实例为大家分享了微信小程序支付C#后端源码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; using System.IO; using System.Security.Cryptography; using System.Text; using System.Xm

  • 微信小程序 自动登陆PHP源码实例(源码下载)

    微信小程序 自动登陆PHP源码实例 app.js 初始化APP自动登陆 您也可以在任何地方进行用户登陆验证 用法:首先在js文件中定义 var app = getApp(); app.getUserDataToken(); App({ onLaunch: function () { /*初始化APP自动登陆 * 您也可以在任何地方进行用户登陆验证 *用法:首先在js文件中定义 var app = getApp(); app.getUserDataToken(); */ this.getUserD

  • 微信小程序 密码输入(源码下载)

    设计支付密码的输入框 效果如下: 实例代码: <view class="pay"> <view class="title">支付方式</view> <view catchtap="wx_pay" class="wx_pay"> <i class="icon {{payment_mode==1?'active':''}}" type="Strin

  • 微信小程序支付前端源码

    本文实例为大家分享了微信小程序支付前端源码,供大家参考,具体内容如下 //index.js Page({ data: { }, //点击支付按钮进行支付 payclick: function () { var t = this; wx.login({ //获取code换取openID success: function (res) { //code = res.code //返回code console.log("获取code"); console.log(res.code); var

  • 微信小程序 支付功能实现PHP实例详解

    微信小程序 支付功能实现PHP实例详解 前端代码: wx.request({ url: 'https://www.yourhost.com/weixin/WeiActivity/payJoinfee',//改成你自己的链接 header: { 'Content-Type': 'application/x-www-form-urlencoded' }, method:'POST', success: function(res) { console.log(res.data); console.lo

  • 微信小程序支付及退款流程详解

    首先说明一下,微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可.我在后端使用的是php,当然在这篇博客里我不打算贴一堆代码来说明支付的具体实现,而主要会侧重于整个支付的流程和一些细节方面的东西.所以使用其他后端语言的朋友有需要也是可以看一下的.很多时候开发的需求和相应问题的解决真的要跳出语言语法层面,去从系统和流程的角度考虑.好的,也不说什么废话了.进入正题. 一. 支付 支付主要分为几个步骤: 前端携带支付需要的数据(商品id,购

  • 微信小程序动态生成二维码的实现代码

    效果图如下: 实现 wxml <!-- 存放二维码的图片--> <view class='container'> <image bindtap="previewImg" mode="scaleToFill" src="{{imagePath}}"></image> </view> <!-- 画布,用来画二维码,只用来站位,不用来显示--> <view class=&qu

  • .NET Core 实现微信小程序支付功能(统一下单)

    最近公司研发了几个电商小程序,还有一个核心的电商直播,只要是电商一般都会涉及到交易信息,离不开支付系统,这里我们统一实现小程序的支付流程(与服务号实现步骤一样). 开通小程序的支付能力 开通小程序支付功能比较简单,基本上按微信文档一步一步的申请就好,如图 以上三个步骤就申请完成 1.提交资料给微信 2.微信审核并签署协议 3.商户后台绑定同主体的APPID 商户后台绑定同一主体的APPID并授权 1.登录商户后台https://pay.weixin.qq.com,进入产品中心-APPID授权管理

  • 微信小程序支付功能 php后台对接完整代码分享

    微信小程序支付,php后台对接完整代码,全是干货呀,拿过来可以直接使用.小程序在调起微信支付之前需要5个参数,这时候就需要携带code向后台请求,然后后台根据code获取openid 再进行服务器之间的. 一.准备工作 1.小程序注册,要以公司的以身份去注册一个小程序,才有微信支付权限: 2.绑定商户号. 3.在小程序填写合法域  二.完成以上条件,你可以得到      小程序appid 小程序秘钥    这两个用于获取用户openid: 商户号id ,商户号秘钥     支付接口必须的: 三.

  • Django实现微信小程序支付的示例代码

    1.下载相关的库 微信官方已经提供了方便开发者的SDK,可是使用pip方式下载: pip install wechatpy 2. 在项目的settings.py文件添加相关配置 具体的参数需要自己到小程序微信公众平台和微信商户平台获取. WECHAT = { 'APPID': 'appid', # 小程序ID 'APPSECRET': 'appsecret', # 小程序SECRET 'MCH_ID': 'mch_id', # 商户号 'TOTAL_FEE': '1', # 总金额, 单位为"分

随机推荐