MVC 接入微信扫码(Native)支付
一、效果图
二、前期准备
1:商户/服务商接入;
2:微信支付配置参数:APPID:绑定支付的APPID(必须配置)、MCHID:商户号(必须配置)、KEY:商户支付密钥;
3:SDK下载后引入自己的项目当中;
三、调起微信支付
/// <summary>
/// 拉起支付
/// </summary>
/// <param name="Amount">付款金额</param>
/// <returns></returns>
public JsonMessage PCWxPayment(string Amount)
{
int PayAmount = 0;
PayAmount = int.Pase(10 * decimal.Pase(Amount));
//生成订单号
string out_trade_no = WxPayApi.GenerateOutTradeNo();
var jobject =PCWxPayment(ReceiveObj.ToString());
string url = "";
if (jobject["Msg"].ToString() == "成功")
{
url = jobject["Data"].ToString();
}
#region 下单成功保存订单业务流程
#endregion
//初始化二维码生成工具
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
qrCodeEncoder.QRCodeVersion = 0;
qrCodeEncoder.QRCodeScale = 4;
//将字符串生成二维码图片
Bitmap image = qrCodeEncoder.Encode(url, Encoding.Default);
//保存为PNG到内存流
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Jpeg);
var data = new
{
Code = true,
Msg = "操作成功",
Url= File(ms.ToArray(), "image/png"),
Type = "1",
};
return Content(data.ToJson());
}
public JsonMessage PCWxPayment(string out_trade_no,int PayAmount)
{
JsonMessage jsonMessage = new JsonMessage();
try
{
WxPayData data = new WxPayData();
data.SetValue("body", "test");//商品描述
data.SetValue("attach", "test");//附加数据
data.SetValue("out_trade_no", out_trade_no);//随机字符串
data.SetValue("total_fee", PayAmount);//总金额
data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
data.SetValue("goods_tag", "jjj");//商品标记
data.SetValue("trade_type", "NATIVE");//交易类型
data.SetValue("product_id", "123");//商品ID
WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
jsonMessage.Code = MsgCode.成功;
jsonMessage.Data = url;
jsonMessage.Msg = "成功";
return jsonMessage;
}
catch (Exception ex)
{
jsonMessage.Code = MsgCode.异常;
jsonMessage.Msg = "系统错误";
return jsonMessage;
}
}
四、支付回调
/// <summary>
/// 支付回调
/// </summary>
/// <returns></returns>
[Route("PCWxPaymentCallback")]
public JsonMessage PCWxPaymentCallback()
{
var request = System.Web.HttpContext.Current.Request;
var dataBody = "";
long? length = request.ContentLength;
if (length != null && length > 0)
{
StreamReader streamReader = new StreamReader(request.InputStream, Encoding.UTF8);
dataBody = streamReader.ReadToEndAsync().Result;
}
return paymentCallbackApp.PCWxPaymentCallback(dataBody);
}
public JsonMessage PCWxPaymentCallback(string ReceiveJson)
{
JsonMessage jsonMessage = new JsonMessage();
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(ReceiveJson);
string return_code = xmlDoc.DocumentElement.GetElementsByTagName("return_code")[0].InnerText;
string out_trade_no = xmlDoc.DocumentElement.GetElementsByTagName("out_trade_no")[0].InnerText;//商户订单号
string transaction_id = xmlDoc.DocumentElement.GetElementsByTagName("transaction_id")[0].InnerText;//微信支付订单号
string nonce_str = xmlDoc.DocumentElement.GetElementsByTagName("nonce_str")[0].InnerText;//随机字符串
string total_fee = xmlDoc.DocumentElement.GetElementsByTagName("total_fee")[0].InnerText; //金额
string attach = xmlDoc.DocumentElement.GetElementsByTagName("attach")[0].InnerText;
//微信支付成功回调
if (return_code.ToUpper() == "SUCCESS")
{
#region 更新订单状态业务流程
#endregion
}
else
{
jsonMessage.Code = MsgCode.参数错误;
jsonMessage.Msg = "参数错误";
return jsonMessage;
}
jsonMessage.Code = MsgCode.成功;
jsonMessage.Msg = "操作成功";
return jsonMessage;
}
catch (Exception ex)
{
jsonMessage.Code = MsgCode.异常;
jsonMessage.Msg = "系统错误";
return jsonMessage;
}
}