1. 程式人生 > >C#微信支付(三)—— H5支付

C#微信支付(三)—— H5支付

接下來就是微信外支付了,先是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就行,寫死或者呼叫外網方法也行。
請在微信外開啟訂單,進行支付 顧名思義了,要在微信外開啟才行