VB.NET版ssl链接(工行查询接口的实现)

 
Imports System
Imports System.Collections.Generic
Imports System.Web
Imports System.Text
Imports System.Net
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Imports System.Net.Security


Public Class IcbcPost

    ''' <summary>
    ''' 工行专用后台Post
    ''' </summary>
    ''' <param name="api_url">工行查询地址</param>
    ''' <param name="APIName">查询接口名称</param>
    ''' <param name="APIVersion">查询接口版本号</param>
    ''' <param name="cert_path">证书路径</param>
    ''' <param name="icbcKey">证书密码</param>
    ''' <param name="strOrderNum">银行订单号</param>
    ''' <param name="strTranDate">交易日期(yyyyMMdd)</param>
    ''' <param name="strShopCode">商户代码</param>
    ''' <param name="strShopAccount">商户账号</param>
    ''' <param name="errInfo">异常时的错误信息</param>
    ''' <returns>返回工行查询结果1、如果查询成功返回Xml文件,如果失败返回5位错误码</returns>
    ''' <remarks></remarks>
    Public Function CheckOrder(ByVal api_url As String, ByVal APIName As String, ByVal APIVersion As String, ByVal cert_path As String, ByVal icbcKey As String, ByVal strOrderNum As String, ByVal strTranDate As String, ByVal strShopCode As String, ByVal strShopAccount As String, ByRef errInfo As String) As String

        errInfo = String.Empty
        Dim post_params As String = "APIName=" + APIName + "&APIVersion=" + APIVersion + "&MerReqData="

        Dim sb As StringBuilder = New StringBuilder()
        sb.Append("<?xml  version=""1.0"" encoding=""GBK"" standalone=""no"" ?><ICBCAPI><in><orderNum>")
        sb.Append(strOrderNum)
        sb.Append("</orderNum><tranDate>")
        sb.Append(strTranDate)
        sb.Append("</tranDate><ShopCode>")
        sb.Append(strShopCode)
        sb.Append("</ShopCode><ShopAccount>")
        sb.Append(strShopAccount)
        sb.Append("</ShopAccount></in></ICBCAPI>")

        Dim post_data As String = post_params + sb.ToString()

        Return PostDataBySSL(post_data, api_url, cert_path, icbcKey, errInfo)

    End Function




    Private Function PostDataBySSL(ByVal post_data As String, ByVal url As String, ByVal cert_path As String, ByVal cert_password As String, ByRef errInfo As String) As String
        errInfo = String.Empty

        Try
            Dim encoding As ASCIIEncoding = New ASCIIEncoding()
            Dim data As Byte() = encoding.GetBytes(post_data)

            If cert_path <> String.Empty Then
                ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
            End If


            Dim WebRequest As WebRequest = WebRequest.Create(url)

            Dim httpRequest As HttpWebRequest = TryCast(WebRequest, HttpWebRequest)

            If (cert_path.ToLower().EndsWith(".cer")) Then
                httpRequest.ClientCertificates.Add(X509Certificate.CreateFromCertFile(cert_path))
            Else
                httpRequest.ClientCertificates.Add(New X509Certificate2(cert_path, cert_password))
            End If

            httpRequest.KeepAlive = True
            httpRequest.UserAgent = "Mozilla/4.0 (compatible MSIE 8.0 Windows NT 6.1 Trident/4.0)"
            httpRequest.ContentType = "application/x-www-form-urlencoded"
            httpRequest.Method = "POST"

            httpRequest.ContentLength = data.Length
            Dim requestStream As Stream = httpRequest.GetRequestStream()
            requestStream.Write(data, 0, data.Length)
            requestStream.Close()

            Dim responseStream As Stream = Nothing

            responseStream = httpRequest.GetResponse().GetResponseStream()
            Dim stringResponse As String = String.Empty
            If responseStream IsNot Nothing Then
                Using responseReader As StreamReader = New StreamReader(responseStream, Text.Encoding.GetEncoding("GBK"))
                    stringResponse = responseReader.ReadToEnd()
                End Using
                responseStream.Close()
            End If

            Return stringResponse

        Catch e As Exception
            errInfo = e.Message
            Return String.Empty
        End Try



    End Function


    Private Function ValidateServerCertificate(ByVal sender As Object, ByVal certificate As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyerrors As SslPolicyErrors) As Boolean
        Return True
    End Function
End Class


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值