在用dz积分充值的之后,调用支付宝支付的时候,并不会显示如下信息:
查看源代码如下:
<form id='alipaysubmit' name='alipaysubmit' action='https://openapi.alipay.com/gateway.do?charset=UTF-8' method='post'><input name='app_id' value='2018020202130779'/><input name='biz_content' value='{"out_trade_no":"8730c344-ebd1-4ef1-93cc-df03da6185dc","product_code":"FAST_INSTANT_TRADE_PAY","qrcode_width":0,"subject":"测试","total_amount":"1"}'/><input name='charset' value='UTF-8'/><input name='format' value='json'/><input name='method' value='alipay.trade.page.pay'/><input name='notify_url' value='https://down.itsvse.com/Pay/Async'/><input name='return_url' value='https://down.itsvse.com/Pay/Return'/><input name='sign_type' value='RSA2'/><input name='timestamp' value='2018-12-09 14:00:26'/><input name='version' value='1.0'/><input name='sign' value='ug2O0tc6dvbzH4wuoELCvkm30UNxgGCeWwH9R5sGv0KW9YmWmZOzzr7byWn3hgzPjpGuaRvDtw24/X1o2kVr+054Z3aaadheG+09aWoEqDTnrYVSUJwcgjTAPak6KEXSsiAd9207BaIFhDMsHowiP4swnh57pRIFXjldBUcCQczAjDUMpx3jwDN8+10d8iFk9jgIuzJM3kugFsua0lECUGEUJb+37+YQ=='/><input type='submit' value='post' style='display:none;'></form>
然后等待1秒钟,会显示如下支付界面:
查看支付宝的sdk代码,发现生成html代码的方法如下:
public string BuildHtmlRequest(IDictionary<string, string> sParaTemp, string strMethod, string strButtonValue) { //待请求参数数组 IDictionary<string, string> dicPara = new Dictionary<string, string>(); dicPara = sParaTemp; StringBuilder sbHtml = new StringBuilder(); //sbHtml.Append("<head><meta http-equiv="Content-Type" content="text/html" charset= "" + charset + "" /></head>"); sbHtml.Append("<form id='alipaysubmit' name='alipaysubmit' action='" + this.serverUrl + "?charset=" + this.charset + "' method='" + strMethod + "'>"); ; foreach (KeyValuePair<string, string> temp in dicPara) { sbHtml.Append("<input name='" + temp.Key + "' value='" + temp.Value + "'/>"); } //submit按钮控件请不要含有name属性 sbHtml.Append("<input type='submit' value='" + strButtonValue + "' style='display:none;'></form>"); // sbHtml.Append("<input type='submit' value='" + strButtonValue + "'></form></div>"); //表单实现自动提交 sbHtml.Append("<scrip{过滤}t>document.forms['alipaysubmit'].submit();</scrip{过滤}t>"); return sbHtml.ToString(); }
在方法拼接form表单的时候,可以设置css样式来隐藏表单,但是需要重新编译dll,就放弃了。
解决方法:
可以在输入以上html代码的时候,head里面加上css样式就好了,代码如下:
response = client.pageExecute(request, null, "post"); StringBuilder sb = new StringBuilder(); sb.Append("<!DOCTYPE html>"); sb.Append("<html>"); sb.Append("<head>"); sb.Append("<meta charset="utf-8">"); sb.Append("<title>支付</title>"); sb.Append("<style>"); sb.Append("#alipaysubmit {display:none;}"); sb.Append("</style>"); sb.Append("</head>"); sb.Append("<body>"); sb.Append(response.Body); sb.Append("</body>"); sb.Append("</html>"); Response.Write(sb.ToString()); Response.End();
拼接这么多html,就是想插入#alipaysubmit {display:none;}样式来隐藏表单。