经过摸索,给calc.xycost.com网站加上了用户自助付费成为会员功能,其中的支付环节是重点,下面是简要的过程:
我采用的是迅虎支付(虎皮椒支付),以此为例:pay.cs的内容,注意跳转链接无法使用通用的&字符,会提示错误。只能使用;号再在程序中解析,当然更好的方法是使用URL路由。
public string Index(string grade, string money, string UserID)
{
var json = new JObject();
try
{
trade_order_id = GenerateOutTradeNo();//网站生成订单号
var dic = new Dictionary<string, string>
{
{"version", "1.1"},
{"lang", "zh-cn"},
{"plugins", "test-001"},
{"appid", ""},//appid
{"appsecret", ""},//appsecret
{"trade_order_id", trade_order_id},//订单号Generate.GenerateOutTradeNo()
{"payment", "wechat"},//支付类型
{"total_fee", money},//金额
{"title", HttpUtility.UrlEncode("BIM")},//标题,中文需要编码“HttpUtility.UrlEncode()”
{"time", GetCurrentTimestamp().ToString()},//时间戳
{"notify_url", "https://calc.xycost.com/login/notify.ashx"},//通知链接http://localhost:62443/通知链接https://calc.xycost.com/login/notify.ashx
{"return_url", $"https://calc.xycost.com/login/user.aspx?UserID={UserID};money={money};grade={grade};trade_order_id={trade_order_id}"},//跳转链接
{"nonce_str", GenerateRandomString()},//随机字符串
};
dic.Add("hash", Sign(dic));
var sr = JsonConvert.DeserializeObject<SamplesResult>(PostHttp(dic));
json.Add(new JProperty("openid", sr.Openid));
json.Add(new JProperty("url", sr.Url));
json.Add(new JProperty("errcode", sr.Errcode));
json.Add(new JProperty("errmsg", sr.Errmsg));
json.Add(new JProperty("hash", sr.Hash));
}
catch (Exception e)
{
throw e;
}
return json.ToString();
}
回调函数notify.ashx,注意下面的内容在VS中无法直接编辑,需要手动记事本添加
<%@ WebHandler Language=”C#” CodeBehind=”notify.ashx.cs” Class=”EngineeringConstructionCost.Login.NotifyHandler” %>
notify.ashx.cs的内容
using System.Web;
namespace EngineeringConstructionCost.Login
{
public class NotifyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// 读取请求参数
HttpRequest request = context.Request;
string tradeOrderId = request.Params["trade_order_id"];
string totalFee = request.Params["total_fee"];
string transactionId = request.Params["transaction_id"];
string plugins = request.Params["plugins"];
string status = request.Params["status"];
string hash = request.Params["hash"];
// 返回成功响应
HttpResponse response = context.Response;
response.ContentType = "text/plain";
response.Write("success");
}
public bool IsReusable
{
get { return false; }
}
}}



评论0