C#微信支付(三)—— H5支付
阿新 • • 發佈:2018-12-11
接下來就是微信外支付了,先是H5支付把。相關連結: H5支付
public class H5Pay
{
public string GetPayUrl(UnifiedOrderModel unifiedOrderModel, string thip)
{
//Log.Info(this.GetType().ToString(), "H5 pay url is producing...");
WxPayData data = new WxPayData();
data.SetValue("body" , unifiedOrderModel.body);
data.SetValue("attach", unifiedOrderModel.attach);
data.SetValue("out_trade_no", unifiedOrderModel.out_trade_no);
data.SetValue("total_fee", unifiedOrderModel.total_fee);
data.SetValue("time_start", unifiedOrderModel.time_start);
data.SetValue("time_expire" , unifiedOrderModel.time_expire);
data.SetValue("goods_tag", unifiedOrderModel.goods_tag);
//因H5支付要求商戶在統一下單介面中上傳使用者真實ip地址“spbill_create_ip”
data.SetValue("spbill_create_ip", thip);
data.SetValue("trade_type", "MWEB");//交易型別
WxPayData result = WxPayApi.UnifiedOrder(data);//呼叫統一下單介面
if (!result.IsSet("mweb_url"))
{
throw new Exception("H5支付地址獲取失敗!");
}
string url = result.GetValue("mweb_url").ToString();//獲得統一下單介面返回的連結
//Log.Info(this.GetType().ToString(), "Get H5 pay url : " + url);
return url;
}
public string GetIP(HttpRequest request)
{
if (request == null || request.ServerVariables == null)
{
return string.Empty;
}
string CustomerIP = string.Empty;
//CDN加速後取到的IP
CustomerIP = request.Headers["Cdn-Src-Ip"];
if (string.IsNullOrEmpty(CustomerIP))
{
CustomerIP = request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
if (string.IsNullOrEmpty(CustomerIP))
{
if (request.ServerVariables["HTTP_VIA"] != null)
{
CustomerIP = request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(CustomerIP))
{
CustomerIP = request.ServerVariables["REMOTE_ADDR"];
}
}
else
{
CustomerIP = request.ServerVariables["REMOTE_ADDR"];
}
}
if (string.IsNullOrEmpty(CustomerIP))
{
CustomerIP = request.UserHostAddress;
}
if (string.IsNullOrEmpty(CustomerIP))
{
CustomerIP = "0.0.0.0";
}
return CustomerIP;
}
}
測試環境的時候,各種滲透,跳轉,幾乎獲取的都是127.0.0.1 這樣肯定就報 網路環境未能通過安全驗證,請稍後再試 的問題了,當時是用搜狐的獲取公網IP方法,要是有其他的用其他的也行,順手就好。
<script src="http://pv.sohu.com/cityjson?ie=utf-8" type="text/javascript"></script>
alert(returnCitySN['cip'] + returnCitySN['cname']);
前端程式碼
function h5Pay() {
$.ajax({
type: "post",
url: "url",
dataType: "json",
data: {
"method": "GetH5PayUrl",
"body": $("#body").val(),
"attach": $("#attach").val(),
"out_trade_no": $("#out_trade_no").val(),
"total_fee": $("#total_fee").val(),
"goods_tag": $("#goods_tag").val(),
"ip": returnCitySN['cip']//測試環境後臺獲取不到真正的IP才可以使用,正式環境不允許
},
success: function (data) {
var item = eval(data); //轉換成json物件訪問
alert(data.url);
if (data.url) {
window.location.href = data.url;
} else {
alert(data.error);
}
return;
}
});
}
就遇到兩個問題:
網路環境未能通過安全驗證,請稍後再試 這個要傳外網真實IP就行,寫死或者呼叫外網方法也行。
請在微信外開啟訂單,進行支付 顧名思義了,要在微信外開啟才行