微信小程序支付C#后端源码
作者:oneall 发布时间:2023-11-21 15:06:29
标签: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 + "¬ify_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
微信小程序支付前端源码
来源:https://www.cnblogs.com/oneall/p/9548722.html


猜你喜欢
- 本文实例讲述了Android使用selector修改TextView中字体颜色和背景色的方法。分享给大家供大家参考,具体如下:android
- Transactional事务的使用及注意Transactional的事务使用,主要引用两个包中的Bean,一个是jpa的javax.tra
- Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate、Mybatis等这些持久化支持。项目中用到了MyBatis,
- C#都没人用了吗,网上想找个现成的雪花分形代码,都没找见,有C++,有python,有java的,就没有C#的,自己试试写一个吧。publi
- 一般文本文件我们以日志文件.log文件为例:import java.io.BufferedReader; import java.io.Fi
- File类简介package com.file;import java.io.File;import java.io.IOException
- 分布式项目和传统项目的区别就是,分布式项目有多个服务,每一个服务仅仅只实现一套系统中一个或几个功能,所有的服务组合在一起才能实现系统的完整功
- 命名空间using EnvDTE;using EnvDTE80;private DTE2 _applicationObject;
- 面试的时候被问到,如何遍历System.drawing.Color下面的所有颜色以及名称以查看,当时答得不好,现将方案记录如下:View C
- 介绍最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里总结了一下,希望大家看
- 在开发中,遇到了sql语句报错,但是并没有回滚的情况。经过几天的排查,终于找到了事务没有回滚的原因。原来的项目用的是informix的数据库
- 判断是否为飞行模式: boolean isAirplaneMode = Settings.System.getInt(mConte
- 1 MapStruct配置MapStuct的使用非常简单,把对应的jar包引入即可。<properties> &n
- 本文实例为大家分享了Android实现一个仿支付宝支付密码的输入框,主要实现如下:PasswordView.javapackage com.
- 当使用struts2的validation.xml进行验证时,需要注意如下几个方面:I.首先应该注意validation.xml的名字,一定
- 仅做学习交流,如有侵犯联系必删。前言一篇酷狗app安卓逆向的文章,难度适中。样本: 酷狗app v10.8.8工具: jadx、Pixel3
- 作者: juky_huang 事件的简单解释: 事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如
- 1、switch支持String做参数/*** * switch支持字符串做参数 jdk7 * @author huangjiawei */
- 前言从来没接触过flutter,我将在这里记录下我的flutter学习踩坑历程。安装就从安装开始叭,官网链接在此。先遵照官网教程来叭。系统要
- 谈到 Java 的线程池最熟悉的莫过于 ExecutorService 接口了,jdk1.5 新增的 java.util.concurren