记:.net 海关179自行加签方法

本文档详细介绍了使用.NET进行海关加签的过程,包括WebSocket连接、加签参数准备、XML数据签名、SHA1哈希计算等关键步骤,提供了一种实现海关报文加签的完整方法。
摘要由CSDN通过智能技术生成

海关加签用的ukey加签方式,拼接报文

public class SignHelper
    {
        private const int REQUEST_TIME_WAIT = 200;
        private const int TIME_OUT = 60000;
        private const string URL = "ws://127.0.0.1:61232";
        private static int m_lastRequestTime;
        private static readonly object m_lockThis = new object();

        public static State WebSocketSign(string jsonParamStr)
        {
            lock (m_lockThis)
            {
                if (Environment.TickCount - m_lastRequestTime < REQUEST_TIME_WAIT)
                    Thread.Sleep(REQUEST_TIME_WAIT);

                m_lastRequestTime = Environment.TickCount;
            }

            WebSocket websocket = new WebSocket(URL);
            State state = new State()
            {
                Parameter = jsonParamStr
            };

            websocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>((sender, e) =>
            {
                state.NoWait = true;
                state.Code = "404";
                state.Message = "Error:" + e.Exception.Message;
                state.Data = string.Empty;
            });

            websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>((sender, e) =>
            {
                try
                {
                    state.Message = "Success";
                    state.Data = e.Message;
                    Websocket_MessageReceived(websocket, state);
                }
                catch (Exception ex)
                {
                    websocket.Close();
                    websocket.Dispose();

                    state.NoWait = true;
                    state.Code = "404";
                    state.Message = "Error:" + ex.Message;
                    state.Data = string.Empty;
                }
            });

            websocket.Open();

            int time = Environment.TickCount;

            while (!state.NoWait && Environment.TickCount - time < TIME_OUT)
                Thread.Sleep(1);

            websocket.Close();
            websocket.Dispose();
            state.Code = "200";

            if (Environment.TickCount - time > TIME_OUT)
                state.Message = "request time out.";

            return state;
        }

        private static void Websocket_MessageReceived(WebSocket webSocket, State state)
        {
            if (state.Data.Contains("握手成功"))
            {
                StringBuilder postJson = new StringBuilder();

                pos

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值