.net 实现微信Native支付方式,根据官方demo,已经从微信后台拿到code_url,现在需要将其转换为二维码展示在html页面中。
官方给出的示例使用asp实现,现做一些修改,通过ajax实现。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>微信支付样例-扫码支付</title>
<meta charset="utf-8" />
</head>
<body>
<div style="margin-left: 10px;color:#00CD00;font-size:30px;font-weight: bolder;">扫码支付模式一</div><br />
<img id="img1" style="width:200px;height:200px;" />
<br /><br /><br />
<div style="margin-left: 10px;color:#00CD00;font-size:30px;font-weight: bolder;">扫码支付模式二</div><br />
<img id="img2" style="width:200px;height:200px;" />
<script src="../Scripts/jquery-1.7.1.min.js"></script>
<script>
$(document).ready(function () {
$.get('NativePayPage.ashx', {}, function (res) {
$('#img2').attr('src', 'data:image/png;base64,' + res.imgurl);
}, 'json');
});
</script>
</body>
/// <summary>
/// NativePayPage 的摘要说明
/// </summary>
public class NativePayPage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
NativePay nativePay = new NativePay();
string url2 = nativePay.GetPayUrl("123456789");
var code2 = CreateQrCode(url2);
var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { imgurl = Convert.ToBase64String(code2) });
context.Response.ContentType = "text/plain";
context.Response.Write(json);
context.Response.End();
}
public byte[] CreateQrCode(string str)
{
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(str, Encoding.Default);
//保存为PNG到内存流
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
return ms.GetBuffer();
}
public bool IsReusable
{
get
{
return false;
}
}
}