72 lines
3.1 KiB
C#
72 lines
3.1 KiB
C#
using Org.BouncyCastle.Ocsp;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace PaymentSDK
|
|
{
|
|
public class WeiPayHelper
|
|
{
|
|
|
|
public WeixinPayRespose UnifiedOrder(OrderQuery query)
|
|
{
|
|
var resp = new WeixinPayRespose();
|
|
try
|
|
{
|
|
Random rd = new Random();
|
|
//外部商户订单号
|
|
var payNum = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(0, 1000).ToString().PadLeft(3, '0');
|
|
var data = new WxPayData();
|
|
data.SetValue("body", query.body);
|
|
data.SetValue("out_trade_no", payNum);
|
|
data.SetValue("detail", query.detail);
|
|
data.SetValue("total_fee", Convert.ToInt32(query.total_fee * 100));
|
|
data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
|
|
data.SetValue("notify_url", WeiXinPayConfig.NotifyUrl);
|
|
|
|
data.SetValue("trade_type", "APP");
|
|
//data.SetValue("openid", query.openid);
|
|
//可以将用户Id和订单Id同时封装在attach中
|
|
data.SetValue("attach", string.Format("{0}-{1}", query.OrderId, payNum));
|
|
WxPayData result = WxPayData.UnifiedOrder(data);
|
|
if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
|
|
{
|
|
resp.err_code_des = result.GetValue("err_code_des").ToString();
|
|
resp.err_code = result.GetValue("err_code").ToString();
|
|
resp.result_code = result.GetValue("result_code").ToString();
|
|
return resp;
|
|
}
|
|
else
|
|
{
|
|
resp.nonce_str = result.GetValue("nonce_str").ToString();
|
|
resp.appid = result.GetValue("appid").ToString();
|
|
resp.mchi_id = result.GetValue("mch_id").ToString();
|
|
resp.result_code = result.GetValue("result_code").ToString();
|
|
resp.prepay_id = "prepay_id=" + result.GetValue("prepay_id").ToString();
|
|
|
|
resp.trade_type = result.GetValue("trade_type").ToString();
|
|
var signType = "MD5";
|
|
var timeStamp = ((DateTime.Now.Ticks - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).Ticks) / 10000).ToString();
|
|
WxPayData applet = new WxPayData();
|
|
applet.SetValue("appId", resp.appid);
|
|
applet.SetValue("nonceStr", resp.nonce_str);
|
|
applet.SetValue("package", resp.prepay_id);
|
|
applet.SetValue("signType", signType);
|
|
applet.SetValue("timeStamp", timeStamp);
|
|
resp.sign = applet.MakeSign();
|
|
resp.timeStamp = timeStamp;
|
|
|
|
//订单号
|
|
//applet.SetValue("orderid", query.OrderId);
|
|
resp.orderid = query.OrderId;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
return resp;
|
|
}
|
|
|
|
}
|
|
}
|