精华内容
下载资源
问答
  • 统一诊断服务否定响应码的判定适用所有诊断服务的NRC及其优先级适用于带子功能参数的诊断服务的NRC及其优先级ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务的NRC优先级通过ID写入数据服务(WriteDataByIdentifier...


    上一篇文章 《UDS服务应该支持哪些否定响应码》中介绍了具体的诊断服务应该支持哪些否定响应码。在实际的应用过程中,经常出现同时满足多个否定响应码的情况。但否定响应中只能给出一个否定响应码。这种情况下应该给出哪个否定响应码呢?这就涉及到诊断服务否定响应码判定优先级问题。
    在ISO14229-1:2013(E)中,对否定响应的处理过程有详细地说明。

    适用所有诊断服务的NRC及其优先级

    首先,我们来看Figure 5 – General server response behaviour。
    Figure 5 – General server response behaviour
    上图的描述可以总结为下表中的NRC优先级。这是判定优先级最高的一组NRC。适用于所有的诊断服务。

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    10x21可选
    服务器正忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务时,回复此编码
    20xXX整车制造商或零部件供应商自定义
    30x11强制要求
    服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的,则回复此编码。
    40x7F强制要求
    诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。
    50x33可选
    在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。
    60xXX整车制造商或零部件供应商自定义

    观察Figure 5 - General server response behaviour的左下角,可以发现进一步的否定响应判断被分成了两个分支。
    在这里插入图片描述

    适用于带子功能参数的诊断服务的NRC及其优先级

    分支一,带子功能参数的诊断服务(0x31服务除外)。常用的带子功能参数的诊断服务如下:

    诊断服务标识
    Service ID
    诊断服务
    Diagnostic Service
    0x10诊断会话控制
    DiagnosticSessionControl
    0x11ECU复位
    ECUReset
    0x19读取故障码信息
    ReadDTCInformation
    0x27安全访问
    SecurityAccess
    0x28通信控制
    CommunicationControl
    0x3E测试设备在线
    TesterPresent
    0x85控制故障码设置
    ControlDTCSetting

    这些带子功能的诊断服务,适用于ISO14229-1:2013(E)中Figure 6 - General server response behaviour for request messages with sub-function parameter中描述的处理逻辑。
    在这里插入图片描述
    这部分处理逻辑可以被总结为如下的NRC处理优先级.(优先级从7开始。优先级为1~6的否定响应码请参考适用所有诊断服务的NRC及其优先级。下同。)

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    仅用于判断最小数据长度。诊断请求的数据长度小于2字节时,回复此编码
    80x12强制要求
    服务器支持诊断请求中的服务标识符(Service ID),但不支持其中的子功能参数时,回复此编码。
    90x7E强制要求
    诊断请求中服务的子功能参数在当前的会话下不支持时,回复此编码。
    100x33可选。
    诊断服务的子功能要求的安全等级未解锁时,回复此编码
    110x24可选。
    诊断服务的子功能需要按照某种顺序依次请求,而当前不满足此条件时,回复此编码。典型的例子是安全访问服务(SID 0x27)
    120xXX整车制造商或零部件供应商自定义

    ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务的NRC优先级

    分支二,ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务。这部分常用的诊断服务如下:

    诊断服务标识
    Service ID
    诊断服务
    Diagnostic Service
    0x22通过ID读取数据
    ReadDataByIdentifier
    0x2E通过ID写入数据
    WriteDataByIdentifier
    0x14清除故障信息
    ClearDiagnosticInformation
    0x2F通过ID进行输入输出控制
    InputOutputControlByIdentifier
    0x31例程控制
    RoutineControl
    0x34请求下载
    RequestDownload
    0x35请求上传
    RequestUpload
    0x36数据传输
    TransferData
    0x37请求退出传输
    RequestTransferExit

    在ISO14229-1:2013(E)中,对这些服务支持的NRC的判定做了具体说明。这里以通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)为例。在ISO14229-1:2013(E)的10.7.4章节Figure 21 - NRC handling for WriteDataByIdentifier service中进行了详细的说明。
    Figure 21 - NRC handling for WriteDataByIdentifier service
    由此图中的描述,可以得出

    通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)所支持的NRC优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    诊断请求的数据长度小于4字节时,回复此编码
    80x31强制要求
    服务器不支持请求的DID或请求的DID不支持写入操作时,回复此编码
    90x13强制要求
    完整的数据长度与预期不一致时,回复此编码
    100x33强制要求
    此服务要求的安全等级未解锁时,回复此编码
    110x22可选。
    DID的写入条件不满足时,回复此编码
    120x31强制要求
    写入的数据无效时,回复此编码
    130x72强制要求
    数据写入到存储器失败时,回复此编码

    参考ISO14229-1:2013(E)中的相关章节,可以得出其它诊断服务的否定响应处理优先级。

    通过ID读取数据服务(ReadDataByIdentifier,SID 0x22)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    诊断请求的数据长度小于4字节时,回复此编码
    80x13强制要求
    完整的数据长度不符合预期,或请求的DID数量超过服务器支持的最大数量时,回复此编码
    90x33强制要求
    请求的DID要求的安全等级未解锁时,回复此编码
    100x22可选。
    读取DID的条件不满足时,回复此编码
    120x31强制要求
    请求的所有DID都不被服务器支持或在当前的会话下不支持时,回复此编码
    130x14强制要求
    诊断响应的数据长度超过服务器支持的最大值时,回复此编码

    清除故障信息服务(ClearDiagnosticInformation, SID 0x14)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    数据长度不为4字节时,回复此编码
    80x31强制要求
    服务器不支持请求中的GroupOfDTC参数时,回复此编码
    90x22可选。
    当清除DTC的条件不满足时,回复此编码
    100xXX整车制造商或零部件供应商自定义
    110x72强制要求
    向存储器写入数据失败时,回复此编码

    通过ID进行输入输出控制服务(InputOutputControlByIdentifier, SID 0x2F)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    数据长度小于4字节时,回复此编码
    80x31强制要求
    请求的服务在当前会话下不被支持或请求中的InputOutputControlParameter参数不被支持时,回复此编码
    90x13强制要求
    完整的数据长度与预期不一致时,回复此编码
    100x31强制要求
    服务器不支持请求中的ControlState参数或ControlMask参数时,回复此编码
    110x33强制要求
    如请求的DID需要的安全等级未解锁时,回复此编码
    120x22可选
    当请求的输入输出控制功能的执行条件不满足时,回复此编码
    130xXX整车制造商或零部件供应商自定义

    例程控制服务(RoutineControl,SID 0x31)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    数据长度小于4字节时,回复此编码
    80x31强制要求
    服务器不支持请求中的例程标识(RID)时,回复此编码
    90x33强制要求
    请求的例程标识(RID)所需的安全等级未解锁时,回复此编码
    100x12强制要求
    服务器不支持请求的子功能参数时,回复此编码
    110x13强制要求
    完整的数据长度不符合预期时,回复此编码
    120x31强制要求
    服务器不支持请求中的RoutineControlOptionRecord参数时,回复此编码
    130x22可选
    当请求的例程控制的执行条件不满足时,回复此编码
    140x24可选
    如下情况下,可回复此编码
    - 例程正在执行,在此收到了启动例程控制(StartRoutine)请求
    - 例程没有执行,而收到了停止例程控制(StopRoutine)请求
    - 收到请求例程控制结果(RequestRoutineResults)的请求时,由于例程没有被执行等原因无法给出执行结果时
    150xXX整车制造商或零部件供应商自定义

    请求下载(RequestDownload, SID 0x34)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    诊断请求的数据长度小于5字节时,回复此编码
    80x31强制要求
    诊断请求中的DataFormatIdentifier参数或AddressAndLengthFormatIdentifier参数无效时时,回复此编码
    90x13强制要求
    完整的数据长度与预期不一致时,回复此编码
    100x31强制要求
    诊断请求中的参数MemoryAddress或MemorySize无效时时,回复此编码
    110x33强制要求
    服务要求的安全等级未解锁时,回复此编码
    120x22可选
    服务器在接收下载数据的过程中又收到了请求下载服务时,回复此编码
    130x70强制要求
    服务器由于故障原因不能执行下载时,回复此编码
    140xXX整车制造商或零部件供应商自定义

    请求上传服务(RequestUpload,SID 0x35)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    诊断请求的数据长度小于5字节时,回复此编码
    80x31强制要求
    诊断请求中的参数DataFormatIdentifier或AddressAndLengthFormatIdentifier无效时时,回复此编码
    90x13强制要求
    完整的数据长度与预期不一致时,回复此编码
    100x31强制要求
    诊断请求中的参数MemoryAddress或MemorySize无效时时,回复此编码
    110x33强制要求
    服务要求的安全等级未解锁时,回复此编码
    120x22可选。
    请求上传数据服务的执行条件不满足时,回复此编码。例如服务器在执行请求上传数据的传输过程中再次收到了请求上传数据服务
    130x70强制要求
    服务器由于故障原因不能执行下载时,回复此编码
    140xXX整车制造商或零部件供应商自定义

    数据传输服务(TransferData,SID 0x36)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x13强制要求
    诊断请求的数据长度小于2字节时,回复此编码
    80x24强制要求
    如下情况,回复此代码
    -收到此服务前,服务器未收到请求下载(RequestDownload)或请求上传服务(RequestUpload)
    -收到此服务前,服务器收到了请求下载(RequestDownload)或请求上传服务(RequestUpload),并且也已经收到了请求传输的全部数据
    90x71强制要求
    传输的下载数据长度与之前收到的请求下载(RequestDownload)服务中的参数MemorySize不一致时,回复此编码
    100x73强制要求
    服务器检测到数据传输的BlockSequenceCounter错误时,回复此编码
    110x31强制要求
    如下情况,回复此编码
    -请求传输的数据长度与之前服务器收到的请求下载(RequestDownload)或请求上传服务(RequestUpload)后给出的肯定响应中的MaxNumberOfBlockLength不一致时(不包括最后一个Block的传输)
    -请求传输的数据长度与服务器的存储器数据对齐要求不一致时
    120x72可选
    服务器在擦除或写入非易失存储器发生错误时,回复此编码
    130x92/0x93可选。
    服务器的供电电压超出了允许向非易失存储器写入数据的电压范围(供电电压过高或过低)时,回复此编码
    140xXX整车制造商或零部件供应商自定义

    请求退出传输服务(RequestTransferExit,SID 0x37)支持的否定响应码优先级

    优先级
    Priority
    否定响应码
    NRC
    备注
    Notes
    70x24强制要求
    如下情况,回复此代码
    -收到此服务时,编程过程未完成
    -收到此服务前,服务器未收到请求下载(RequestDownload)或请求上传服务(RequestUpload)
    80x31可选
    请求中的参数无效时,回复此编码
    90x13强制要求
    诊断请求的数据长度与预期不一致时,回复此编码
    100xXX整车制造商或零部件供应商自定义

    参考文献
    Road vehicles - Unified diagnostic services (UDS) - Part 1: Specification and requirements, Second edition 2013-03-15

    展开全文
  • HTTP响应码大全

    千次阅读 2018-05-25 00:10:59
    状态由服务器响应客户端对服务器的请求而发出。它包括来自IETF 征求意见(RFC)的代码,其他规范以及用于超文本传输​​协议(HTTP)的一些常见应用程序的一些附加代码。状态代码的第一个数字指定了五个标准类别...

    HTTP状态码列表

    维基


    互联网编号分配机构(IANA)维护的HTTP状态代码正式注册。[2]这是超文本传输​​协议(HTTP)响应状态代码的列表。状态码由服务器响应客户端对服务器的请求而发出。它包括来自IETF 征求意见(RFC)的代码,其他规范以及用于超文本传输​​协议(HTTP)的一些常见应用程序的一些附加代码。状态代码的第一个数字指定了五个标准类别的响应中的一个。所示的消息短语是典型的,但可以提供任何人类可读的替代方案。除非另有说明,否则状态码是HTTP / 1.1标准(RFC 7231)的一部分。[1]

    微软Internet信息服务(IIS),有时使用更具体的信息,另外小数子码,[3]然而,这些子代码只出现在响应有效载荷和文档,而不是在一个实际的HTTP状态代码的地方。

     

    内容

      [ 隐藏 ] 

     

    1xx信息响应编辑]

    信息性回应表明该请求已收到并被理解。它是在临时的基础上发布的,而请求处理仍在继续。它提醒客户等待最后的回应。该消息仅由状态行和可选标题字段组成,并以空行结束。由于HTTP / 1.0标准没有定义任何1xx状态码,除了实验条件外,服务器不得[注1]向符合HTTP / 1.0的客户端发送1xx响应。[4]

    100继续

    服务器已收到请求标头,客户端应继续发送请求正文(在需要发送正文请求的情况下,例如POST请求)。在拒绝不合适的标题请求后,向服务器发送大型请求主体效率不高。要让服务器检查请求的标题,客户端必须Expect: 100-continue在其初始请求中发送标题,并100 Continue在发送主体之前接收状态码作为响应。如果客户端收到错误代码,如403(禁止)或405(方法不允许),则不应发送请求的正文。答复417 Expectation Failed表明,该请求应该重复没有Expect头,因为它表示服务器不支持期望值(例如,HTTP / 1.0服务器就是这种情况)。[5]

    101交换协议

    请求者已经请求服务器切换协议,并且服务器已经同意这么做。[6]

    102处理(WebDAV ; RFC 2518

    WebDAV请求可能包含许多涉及文件操作的子请求,需要很长时间才能完成请求。此代码表示服务器已收到并正在处理该请求,但尚未有任何响应。[7]这防止客户端超时并假设请求丢失。

    103早期提示(RFC 8297

    用于在最终的HTTP消息之前返回一些响应头。[8]

    2xx成功编辑]

    这类状态代码表明客户要求的行为已被接收,理解和接受。[2]

    200 OK

    成功HTTP请求的标准响应。实际的响应将取决于使用的请求方法。在GET请求中,响应将包含与请求资源相对应的实体。在POST请求中,响应将包含描述或包含操作结果的实体。[9]

    201创建

    请求已完成,从而创建新资源。[10]

    202接受

    该请求已被接受处理,但处理尚未完成。该请求可能会或可能不会最终执行,并且在处理发生时可能会被禁止。[11]

    203非权威信息(自HTTP / 1.1以来)

    服务器是一个转换代理(例如Web加速器),它从原始地址接收到200 OK,但返回的是原始响应的修改版本。[12] [13]

    204无内容

    服务器成功处理了请求并且没有返回任何内容。[14]

    205重置内容

    服务器成功处理了请求,但未返回任何内容。与204响应不同,此响应要求请求者重置文档视图。[15]

    206部分内容(RFC 7233

    由于客户端发送的范围标题,服务器仅传递部分资源(字节服务)。HTTP客户端使用范围标题来启用中断下载的恢复,或将下载分割为多个同步流。[16]

    207多状态(WebDAV; RFC 4918

    接下来的消息主体默认为XML消息,并且可以包含多个单独的响应代码,具体取决于创建了多少个子请求。[17]

    208已报告(WebDAV; RFC 5842

    DAV绑定的成员已经在(multistatus)响应的前一部分中枚举,并且不再被包含。

    226使用的IM(RFC 3229

    服务器已经完成了对资源的请求,并且该响应表示应用于当前实例的一个或多个实例操作的结果。[18]

    3xx重定向编辑]

    这类状态码表明客户必须采取额外的行动来完成请求。这些状态码中的很多都用于URL重定向[2]

    只有在第二个请求中使用的方法是GET或HEAD时,用户代理才可以在没有用户交互的情况下执行附加操作。用户代理可能会自动重定向请求。用户代理应检测并干预以防止周期性重定向。[19]

    300多种选择

    指示客户可以从中选择的资源的多个选项(通过代理驱动的内容协商)。例如,此代码可用于呈现多个视频格式选项,列出具有不同文件名扩展名的文件,或建议词义消歧[20]

    301永久移动

    这个和所有将来的请求都应该指向给定的URI[21]

    302找到

    告诉客户查看(浏览)另一个网址。302被303和307所取代。这是一个与标准相矛盾的行业惯例。HTTP / 1.0规范(RFC 1945)要求客户端执行临时重定向(原始描述短语是“暂时移动”)[22],但流行的浏览器使用303 See Other的功能实现302。因此,HTTP / 1.1添加了状态码303和307来区分这两种行为。[23]然而,某些Web应用程序和框架使用302个状态码,好像它是在303 [24]

    303查看其他(自HTTP / 1.1)

    可以使用GET方法在另一个URI下找到对请求的响应。当收到响应POST(或PUT / DELETE)的响应时,客户端应该假定服务器已经收到数据并且应该向给定的URI发出一个新的GET请求。[25]

    304未修改(RFC 7232

    表示自请求标头 If-Modified-Since或If-None-Match 指定的版本后,资源未被修改。在这种情况下,由于客户端仍然具有先前下载的副本,所以不需要重新传输资源。[26]

    305使用代理(自HTTP / 1.1)

    请求的资源只能通过代理服务器获得,代理服务器的地址在响应中提供。主要出于安全原因,许多HTTP客户端(如Mozilla [27]Internet Explorer)无法正确处理此状态码的响应。[28]

    306交换机代理

    不再使用。原本的意思是“后续的请求应该使用指定的代理。” [29]

    307临时重定向(自HTTP / 1.1以来)

    在这种情况下,请求应该用另一个URI重复; 但是,未来的请求应该仍然使用原始URI。与历史上实现302的方式不同,请求方法在重新发送原始请求时不允许更改。例如,应该使用另一个POST请求重复POST请求。[30]

    308永久重定向(RFC 7538

    请求和所有将来的请求应该使用另一个URI重复。307和308与302和301的行为并行,但不允许HTTP方法改变。因此,例如,将表单提交给永久重定向的资源可能会继续顺利进行。[31]

    4xx客户端错误编辑]

    维基百科404错误。

    维基百科 404错误

    这类状态码适用于错误似乎是由客户端引起的情况。除了响应HEAD请求外,服务器应该包含一个包含错误情况说明的实体,以及它是临时还是永久状态。这些状态码适用于任何请求方法。用户代理应该向用户显示任何包含的实体。[32]

    400错误请求

    由于明显的客户端错误(例如,格式错误的请求语法,大小过大,请求消息帧无效或欺骗性请求路由),服务器无法或不会处理该请求。[33]

    401未经授权(RFC 7235

    403 Forbidden类似,但专门用于需要认证且失败或尚未提供的情况。响应必须包含一个WWW-Authenticate标头字段,其中包含适用于所请求资源的挑战。请参阅基本访问验证摘要访问验证[ 401 ]语义上意味着“未经认证”[35]即用户没有必要的凭证。

    注意:当IP地址被禁止访问网站(通常是网站域)并且该特定地址被拒绝访问网站时,某些网站会发出HTTP 401 。

    402需要付款

    保留以供将来使用。最初的意图是,这个代码可能被用作某种形式的数字现金微支付方案的一部分,正如GNU Taler [36]提出的那样,但这种情况尚未发生,而且这种代码通常不被使用。如果某个开发人员超出了每日请求限制,Google Developers API会使用此状态。[37]

    403禁止

    该请求是有效的,但服务器拒绝采取行动。用户可能没有资源所需的权限,或者可能需要某种帐户。

    404未找到

    找不到请求的资源,但可能在将来可用。客户的后续请求是允许的。

    405方法不允许

    所请求的资源不支持请求方法; 例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。

    406不可接受

    请求的资源只能根据请求中发送的Accept头生成不可接受的内容。[38]内容谈判

    需要407代理验证(RFC 7235

    客户端必须首先使用代理进行身份验证。[39]

    408请求超时

    服务器超时等待请求。根据HTTP规范:“客户端在服务器准备等待的时间内没有发出请求,客户可以在以后不做任何修改的情况下重复请求。” [40]

    409冲突

    表示请求因请求发生冲突而无法处理,例如多个同时更新之间的编辑冲突

    410消失

    表示所请求的资源不再可用,并且不再可用。这应该在资源被有意删除并且资源被清除时使用。在收到410状态码后,客户不应在未来请求资源。诸如搜索引擎之类的客户应该从其索引中移除资源。[41]大多数用例不要求客户端和搜索引擎清除资源,而是可以使用“404 Not Found”。

    411长度要求

    请求没有指定请求资源所需的内容的长度。[42]

    412先决条件失败(RFC 7232

    服务器不符合请求者提出请求的前提条件之一。[43]

    413有效负载太大(RFC 7231

    该请求比服务器愿意或能够处理的要大。以前称为“请求实体太大”。[44]

    414 URI太长(RFC 7231

    提供的URI太长,服务器无法处理。通常是由于太多数据被编码为GET请求的查询字符串,在这种情况下,它应该转换为POST请求。[45]之前称为“Request-URI太长”。[46]

    415不支持的媒体类型

    请求实体具有服务器或资源不支持的媒体类型。例如,客户端将图像上传为image / svg + xml,但服务器要求图像使用不同的格式。

    416范围不可满足(RFC 7233

    客户端要求提供文件的一部分(字节服务),但服务器无法提供该部分。例如,如果客户端要求文件末尾以外的部分文件。[47]之前称为“请求范围不可满足”。[48]

    417期望失败

    服务器不能满足Expect请求头字段的要求。[49]

    418我是一个茶壶(RFC 2324RFC 7168

    这个代码在1998年定义为传统的IETF April Fools的笑话之一,在RFC 2324超文本咖啡壶控制协议中,预计不会被实际的HTTP服务器实现。RFC指定这个代码应该由请求冲泡咖啡的茶壶返回。[50]此HTTP状态在一些网站(包括Google.com)中用作复活节彩蛋[51] [52]

    421误导请求(RFC 7540

    该请求针对的是无法产生响应的服务器[53](例如由于连接重用)。[54]

    422不可处理的实体(WebDAV; RFC 4918

    请求格式良好,但由于语义错误无法遵循。[17]

    423锁定(WebDAV; RFC 4918

    正在访问的资源被锁定。[17]

    424失败依赖(WebDAV; RFC 4918

    请求失败,因为它依赖于另一个请求,并且该请求失败(例如PROPPATCH)。[17]

    需要升级426

    客户端应该切换到不同的协议,例如升级标题字段中给出的TLS / 1.0[55]

    428先决条件要求(RFC 6585

    原始服务器要求该请求是有条件的。为了防止“丢失更新”问题,客户端获取资源的状态,修改它并将其重新发回服务器,同时第三方修改了服务器上的状态,导致冲突。“ [56 ]

    429太多请求(RFC 6585

    用户在给定的时间内发送了太多的请求。旨在用于速率限制方案。[56]

    431请求标头字段太大(RFC 6585

    服务器不愿意处理该请求,因为单个标题字段或所有标题字段的集体太大。[56]

    451不可用法律原因RFC 7725

    服务器运营商已收到合法要求,拒绝访问资源或包含请求资源的一组资源。[45]代码451被选作参考新颖的华氏451(参见RFC中的致谢)。

    5xx服务器错误编辑]

    服务器无法完成请求。[58]

    以数字“5”开头的响应状态代码指示服务器意识到它遇到错误或无法执行请求的情况。除了响应HEAD请求之外,服务器应该包含一个包含错误情况说明的实体,并指出它是临时还是永久状态。同样,用户代理应该向用户显示任何包含的实体。这些响应代码适用于任何请求方法。[59]

    500内部服务器错误

    通用错误消息,在遇到意外情况时给出并且没有更具体的消息适用。[60]

    501未实施

    服务器要么不识别请求方法,要么缺乏完成请求的能力。通常这意味着未来的可用性(例如,Web服务API的新特性)。[61]

    502错误的网关

    服务器充当网关或代理,并收到来自上游服务器的无效响应。[62]

    503服务不可用

    服务器当前不可用(因为它过载或因维护而关闭)。一般来说,这是一个暂时的状态。[63]

    504网关超时

    服务器充当网关或代理服务器,没有收到来自上游服务器的及时响应。[64]

    不支持505 HTTP版本

    服务器不支持请求中使用的HTTP协议版本。[65]

    506变式也协商(RFC 2295

    对请求的透明内容协商会产生循环引用[66]

    507存储不足(WebDAV; RFC 4918

    服务器无法存储完成请求所需的表示。[17]

    508环路检测(WebDAV; RFC 5842

    服务器在处理请求时检测到无限循环(代替208已报告发送)。

    510不扩展(RFC 2774

    服务器需要对请求进一步扩展才能实现它。[67]

    需要511网络认证(RFC 6585

    客户端需要进行身份验证才能获得网络访问权限。通过拦截用于控制对网络的访问的代理(例如,用于在通过Wi-Fi热点授予完全互联网访问之前需要与服务条款达成协议的“ 专属门户 ”)来使用。[56]

    非官方代码编辑]

    以下代码未由任何标准规定。

    103检查站

    在可恢复请求建议中使用,以恢复异常终止或POST请求。[68]

    420方法失败(Spring框架

    Spring Framework在方法失败时使用的弃用响应。[69]

    420增强你的平静(Twitter

    当客户受限速时,由Twitter搜索和趋势API的第1版返回; 1.1版和更高版本使用429“太多请求”响应代码。[70]

    450由Windows家长控制(Microsoft)阻止

    当Windows家长控制打开并阻止访问请求的网页时,指示的Microsoft扩展代码。[71]

    498令牌无效(Esri)

    ArcGIS for Server返回。代码498表示已过期或无效的令牌。[72]

    499令牌要求(Esri)

    ArcGIS for Server返回。代码499表示需要令牌但未提交。[72]

    超出509带宽限制(Apache Web服务器 / cPanel

    服务器已超出服务器管理员指定的带宽; 这通常由共享主机提供商用来限制客户的带宽。[73]

    530网站被冻结

    万神殿网络平台使用,表示由于不活动而被冻结的网站。[74]

    598(非正式惯例)网络读取超时错误

    由某些HTTP代理用于向代理前面的客户端发送代理服务器后面的网络读取超时信号。[75]

    互联网信息服务编辑]

    微软的Internet信息服务 Web服务器扩展了4xx错误空间,以便根据客户的请求发出错误信号。

    440登录超时

    客户端的会话已过期,必须重新登录。[76]

    449重试

    服务器无法兑现请求,因为用户未提供所需的信息。[77]

    451重定向

    当更有效的服务器可用或服务器无法访问用户的邮箱时,用于Exchange ActiveSync[78]客户端需要重新运行HTTP AutoDiscover操作来查找更合适的服务器。[79]

    nginx 编辑]

    nginx的 Web服务器软件扩展了4xx错误的空间信号与客户端的请求的问题。[80] [81]

    444没有回应

    内部使用[82]指示服务器不向客户端返回任何信息并立即关闭连接。

    494请求标题太大

    客户端发送的请求太大或标题行太长。

    495 SSL证书错误

    400错误请求响应代码的扩展,当客户端提供了无效的客户端证书时使用

    需要496 SSL证书

    400错误请求响应代码的扩展,当需要客户端证书但未提供时使用。

    497 HTTP请求已发送到HTTPS端口

    当客户端向侦听HTTPS请求的端口发出HTTP请求时使用的400错误请求响应代码的扩展。

    499客户关闭请求

    当客户端在服务器发送响应之前关闭请求时使用。

    Cloudflare 编辑]

    Cloudflare的反向代理服务扩展了5xx系列的错误空间,以指示源服务器的问题。[83]

    520未知错误

    将520错误用作“原始服务器返回意外事件时的全部响应”,列出连接重置,大标题以及作为常见触发器的空或无效响应。

    521 Web服务器已关闭

    原始服务器已拒绝Cloudflare的连接。

    522连接超时

    Cloudflare无法与原始服务器协商TCP握手

    523来源无法到达

    Cloudflare无法访问原始服务器; 例如,如果源服务器的DNS记录不正确。

    524超时发生

    Cloudflare能够完成与原始服务器的TCP连接,但未收到及时的HTTP响应。

    525 SSL握手失败

    Cloudflare无法与原始服务器协商SSL / TLS握手

    526 SSL证书无效

    Cloudflare无法验证源服务器提供的SSL / TLS证书。

    527轨道炮错误

    错误527表示WAN连接建立后请求超时或失败。[84]

    530起源DNS错误

    错误530指示所请求的主机名无法在Cloudflare网络上解析为原始服务器。[85]

    展开全文
  • UDS服务应该支持哪些否定响应码

    千次阅读 2020-05-17 22:38:10
    UDS服务应该支持哪些否定响应码所有服务都需支持的否定响应码具体的服务需要支持的否定响应码否定响应码定义及其取值 USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response...

    USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组:
    0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。
    0x01 – 0x7F:诊断通信相关的否定响应码。
    0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定响应码。给出这些否定响应码而不是给出0x22的目的是为了提供请求的服务不能被执行的更详细的原因。

    具体的否定响应编码及其使用条件,请见本文最后的列表。

    由于诊断服务的功能不同,其所支持的否定响应码是不完全相同的。那每个诊断服务要支持哪些否定响应码呢?

    所有服务都需支持的否定响应码

    首先,ISO14229-1:2013(E)中定义了一组每个诊断服务都需要支持的否定响应码。见下表。

    否定响应码
    NRC
    定义
    Definition
    0x21服务器忙
    BusyRepeatRequest
    0x11诊断服务不支持
    ServiceNotSupported
    0x7F诊断服务在当前会话下不支持
    serviceNotSupportedInActiveSession
    0x78收到诊断请求,等待响应
    RequestCorrectlyReceived-ResponsePending

    具体的服务需要支持的否定响应码

    其次,针对具体的诊断服务,ISO14229-1:2013(E)定义了其所需支持的特定否定响应码。这里以诊断会话控制服务(0x10)为例。在ISO14229-1:2013(E)的9.2.4章节,定义了诊断会话控制服务(0x10)需要支持的否定响应码,为0x12、0x13、0x22。其它诊断服务支持的特定否定响应码,可以参考标准中的相应章节。
    在这里插入图片描述

    这里列举了常用的诊断服务所支持的否定响应码。如下表:

    诊断服务标识
    Service ID
    诊断服务
    Diagnostic Service
    支持的否定响应码
    Supported NRC
    0x10诊断会话控制
    DiagnosticSessionControl
    0x12, 0x13, 0x22
    0x11ECU复位
    ECUReset
    0x12, 0x13, 0x22, 0x33
    0x14清楚故障信息
    ClearDiagnosticInformation
    0x13, 0x22, 0x31, 0x72
    0x19读取故障码信息
    ReadDTCInformation
    0x12, 0x13, 0x31
    0x22通过ID读取数据
    ReadDataByIdentifier
    0x13, 0x14, 0x22, 0x31, 0x33
    0x27安全访问
    SecurityAccess
    0x12, 0x13, 0x22, 0x24, 0x31, 0x35, 0x36, 0x37
    0x28通信控制
    CommunicationControl
    0x12, 0x13, 0x22, 0x31
    0x2E通过ID写入数据
    WriteDataByIdentifier
    0x13, 0x22, 0x31, 0x33, 0x72
    0x2F通过ID进行输入输出控制
    InputOutputControlByIdentifier
    0x13, 0x22, 0x31, 0x33
    0x31例程控制
    RoutineControl
    0x12, 0x13, 0x22, 0x24, 0x31, 0x33, 0x72
    0x34请求下载
    RequestDownload
    0x13, 0x22, 0x31, 0x33, 0x70
    0x35请求上传
    RequestUpload
    0x13, 0x22, 0x31, 0x33, 0x70
    0x36数据传输
    TransferData
    0x13, 0x24, 0x31, 0x71, 0x72, 0x73, 0x92/0x93
    0x37请求结束传输
    RequestTransferExit
    0x13, 0x24, 0x31, 0x72
    0x3E测试设备在线
    TesterPresent
    0x12, 0x13
    0x85控制故障码设置
    ControlDTCSetting
    0x12, 0x13, 0x22, 0x31

    否定响应码定义及其取值

    最后,下表中列出了ISO14229-1:2013(E)中定义的否定响应码及其使用条件。供大家参考。

    编码描述助记词
    0x00此编码用于服务器内部实现否定响应码的逻辑时使用,用于表示没有NRC,不给出否定响应。此编码不会在否定响应中给出。PR
    (PositiveResponse)
    0x01 - 0x0FISO预留。用于以后扩展。ISOSAERESRVD
    0x10表示请求的诊断服务被服务器(ECU)拒绝,但在本表中所有已定义的编码都不适用,这时回复此编码。GR
    (GeneralReject)
    0x11服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的,则服务器给出此NRC编码。SNS
    (ServiceNotSupported).
    0x12服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时,回复此编码。SFNS
    (SubFunctionNotSupported)
    0x13请求服务的诊断报文中的数据长度与定义不一致时,回复此编码。
    请求服务中参数的格式与定义不一致时也会回复此编码。(不常用)
    IMLOIF
    (IncorrectMessageLengthOrInvalidFormat)
    0x14服务器准备给出的诊断响应中所包含的数据长度超出了服务器所支持的最大长度时,回复编码。RTL
    (ResponseTooLong)
    0x15 - 0x20ISO预留。用于以后扩展。ISOSAERESRVD
    0x21给出这个NRC编码时,表示服务器忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务。BRR
    (BusyRepeatReques)
    0x22请求的诊断服务的执行条件不满足时,回复此编码。CNC
    (ConditionsNotCorrect)
    0x23ISO预留。用于以后扩展ISOSAERESRVD
    0x24请求服务的顺序不正确时,回复此编码。某写诊断服务请求是有先后顺序的。典型的就是安全访问(SecurityAccess)服务。必须先请求种子(Request Seed),再回复密钥(Send Key)。如果直接回复秘钥(Send Key),则服务器会回复此编码。RSE
    (RequestSequenceError)
    0x25此编码适用于网关。当向网关请求的服务需要子网段中的控制器执行去执行,但是子网段中的控制器没有正常的执行网关的请求。此时,网关应向请求诊断服务的设备回复此编码。NRFSC
    (NoResponseFromSubnetComponent)
    0x26由于当前服务器存在故障,并且已经记录下了对应的故障码(DTC),切此故障会导致请求的服务无法执行时,回复此编码。FPEORA
    (FailurePreventsExecutionOfRequestedAction)
    0x27 - 0x30ISO预留。用于以后扩展。ISOSAERESRVD
    0x31诊断请求中的参数超出定义的范围,或者访问的数据标识符(DID)、例程标识符(RoutineID)是服务器不支持或在当前会话不支持时,回复此编码。ROOR
    (RequestOutOfRange)
    0x32ISO预留。用于以后扩展。ISOSAERESRVD
    0x33通常在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。SAD
    (SecurityAccessDenied)
    0x34ISO预留。用于以后扩展。ISOSAERESRVD
    0x35服务器收到的安全访问(SecurityAccess)服务请求子功能为发送秘钥(SendKey),但服务器收到的秘钥(Key)不正确时,回复此编码。IK
    (InvalidKey)
    0x36请求安全访问(SecurityAccess)服务的失败次数超过服务器允许的最大次数时,回复此编码。ENOA
    (ExceedNumberOfAttempts)
    0x37服务器在安全访问延迟时间内收到安全访问(SecurityAccess)服务请求时,回复此编码。RTDNE
    (RequiredTimeDelayNotExpired)
    0x38 - 0x4F预留。用于扩展数据链路安全。RBEDLSD
    (ReservedByExtendedDataLinkSecurityDocument)
    0x50 - 0x6FISO预留。用于以后扩展。ISOSAERESRVD
    0x70由于故障导致从服务器的存储器上传数据失败或向服务器的存储器下载数据失败时,回复此代码。UDNA
    (UploadDownloadNotAccepted)
    0x71由于故障导致数据传输操作被中断时,回复此编码。TDS
    (TransferDataSuspended)
    0x72服务器在擦除或写入Flash出现错误时,回复此代码。GPF
    (GeneralProgrammingFailure)
    0x73在执行数据传输服务(TransferData (0x36) service)的过程中,检测到数据块序列编号(BlockSequenceCounter)错误时,回复此编码。WBSC
    (WrongBlockSequenceCounter)
    0x74 - 0x77ISO预留。用于以后扩展。ISOSAERESRVD
    0x78诊断请求已经收到,并且是有效的,服务器正在执行请求的服务,无法继续接收新的服务请求时,回复此代码。当正在执行的服务完成后,仍需给出最终的肯定或否定响应。RCRRP
    (RequestCorrectlyReceived-ResponsePending)
    0x79 - 0x7DISOSAEReservedThis range of values is reserved for future definition.
    0x7E诊断请求中服务的子功能参数在当前的会话下不支持时,回复此编码。需要注意的是,回复此编码时,子功能参数是服务器在其它会话下支持的,只是在当前的会话下不支持。如果服务器在任何会话下都不支持此子功能参数,则需回复0x12.SFNSIAS
    (SubFunctionNotSupportedInActiveSession)
    0x7F诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。需要注意的是,回复此编码时,的服务标识符(Service ID)是服务器在其它会话下支持的,只是在当前的会话下不支持。如果服务器在任何会话下都不支持此子功能参数,则需回复0x11.SNSIAS
    (ServiceNotSupportedInActiveSession)
    0x80ISO预留。用于以后扩展。ISOSAERESRVD
    0x81请求的诊断服务被执行的条件之一是发动机转速低于某一限值,而此时的发动机转速不满足此要求时,回复此编码。RPMTH
    (RpmTooHigh)
    0x82请求的诊断服务被执行的条件之一是发动机转速高于某一限值,而此时的发动机转速不满足此要求时,回复此编码。RPMTL
    (RpmTooLow)
    0x83请求的诊断服务被执行的条件之一是发动机处于停机状态,而此时发动机处于运转状态,则回复此编码。EIR
    (EngineIsRunning)
    0x84请求的诊断服务被执行的条件之一是发动机处于运转状态,而此时发动机处于停机状态,则回复此编码。EINR
    (EngineIsNotRunning)
    0x85请求的诊断服务被执行的条件之一是发动机运转的时间超过某一限值,而此时该条件不满足,则回复此编码。ERTTL
    (EngineRunTimeTooLow)
    0x86请求的诊断服务被执行的条件之一是当前的温度低于某一限值,而此时该条件不满足,则回复此编码。TEMPTH
    (TemperatureTooHigh)
    0x87请求的诊断服务被执行的条件之一是当前的温度高于某一限值,而此时该条件不满足,则回复此编码。TEMPTL
    (TemperatureTooLow)
    0x88请求的诊断服务被执行的条件之一是当前的车速低于某一限值,而此时该条件不满足,则回复此编码。VSTH
    (VehicleSpeedTooHigh)
    0x89请求的诊断服务被执行的条件之一是当前的车速高于某一限值,而此时该条件不满足,则回复此编码。VSTL
    (VehicleSpeedTooLow)
    0x8A请求的诊断服务被执行的条件之一是节气门开度或加速踏板开度低于某一限值,而此时该条件不满足,则回复此编码。TPTH
    (Throttle/PedalTooHigh)
    0x8B请求的诊断服务被执行的条件之一是节气门开度或加速踏板开度高于某一限值,而此时该条件不满足,则回复此编码。TPTL
    (Throttle/PedalTooLow)
    0x8C请求的诊断服务被执行的条件之一是变速器处于空档,而此时该条件不满足,则回复此编码。TRNIG
    (TransmissionRangeNotInNeutral)
    0x8D请求的诊断服务被执行的条件之一是变速器处于非空档,而此时该条件不满足,则回复此编码。TRNIG
    (TransmissionRangeNotInGear)
    0x8EISO预留。用于以后扩展。ISOSAERESRVD
    0x8F请求的诊断服务被执行的条件之一是在诊断服务被执行前和执行过程中制动踏板没有被踩下,而此时该条件不满足,则回复此编码。BSNC
    (BrakeSwitch(es)NotClosed)
    0x90请求的诊断服务被执行的条件之一是变速器处于P空档,而此时该条件不满足,则回复此编码。SLNIP
    (ShifterLeverNotInPark)
    0x91请求的诊断服务被执行的条件之一是液力变矩器未处于锁止状态,而此时该条件不满足,则回复此编码。TCCL
    (TorqueConverterClutchLocked)
    0x92请求的诊断服务被执行的条件之一是蓄电池电压低于设定的限值,而此时该条件不满足,则回复此编码。VTH
    (VoltageTooHigh)
    0x93请求的诊断服务被执行的条件之一是蓄电池电压高于设定的限值,而此时该条件不满足,则回复此编码。VTL
    (VoltageTooLow)
    0x94 - 0xEF预留。用于将来定义特定的条件不满足情况。RFSCNC
    (ReservedForSpecificConditionsNotCorrect)
    0xF0 - 0xFE预留。用于车辆制造商定义特定的条件不满足的情况。VMSCNC
    (VehicleManufacturerSpecificConditionsNotCorrect)
    0xFFISO预留。用于以后扩展。ISOSAERESRVD

    参考文献:

    1. Road vehicles - Unified diagnostic services (UDS) - Part 1: Specification and requirements, Second edition 2013-03-15
    展开全文
  • 微信扫登录不同的就是 支付成功 只有异步没有,支付成功的跳转。因此我们在支付扫的时候要一直检测是否支付成功。微信扫支付的代码 配置这几个代码去官方下载就好 微信配置账号在别的不用动。下面我们开始...

    微信扫码登录不同的就是 支付成功  只有异步没有,支付成功的跳转。因此我们在支付扫码的时候要一直检测是否支付成功。


    微信扫码支付的代码 配置





    这几个代码去官方下载就好 


    微信配置账号在




    别的不用动。下面我们开始请求


    前端显示 这个样子的


    点击支付 显示效果




    前端代码 


    <html>
    <head>
       <meta charset="utf-8">
       <script type="text/javascript" src="jquery-1.11.3.min.js"></script>
       <title></title>
       <style type="text/css">
          .content{width:80%;margin:200px auto;}
          .hide_box{z-index:999;filter:alpha(opacity=50);background:#666;opacity: 0.5;-moz-opacity: 0.5;left:0;top:0;height:99%;width:100%;position:fixed;display:none;}
          .shang_box{width:340px;height:378px;padding:10px;background-color:#fff;border-radius:10px;position:fixed;z-index:1000;left:50%;top:50%;margin-left:-280px;margin-top:-280px;border:1px dotted #dedede;display:none;}
          .shang_box img{border:none;border-width:0;}
          .dashang{display:block;width:100px;margin:5px auto;height:25px;line-height:25px;padding:10px;background-color:#E74851;color:#fff;text-align:center;text-decoration:none;border-radius:10px;font-weight:bold;font-size:16px;transition: all 0.3s;}
          .dashang:hover{opacity:0.8;padding:15px;font-size:18px;}
          .shang_close{float:right;display:inline-block;}
          .shang_logo{display:block;text-align:center;margin:20px auto;}
          .shang_tit{width: 100%;height: 75px;text-align: center;line-height: 66px;color: #a3a3a3;font-size: 16px;background: url('img/cy-reward-title-bg.jpg');font-family: 'Microsoft YaHei';margin-top: 7px;margin-right:2px;}
          .shang_tit p{color:#a3a3a3;text-align:center;font-size:16px;}
          .shang_payimg{width:185px;padding:10px;border:6px solid #EA5F00;margin:0 auto;border-radius:3px;height:176px;}
          .shang_payimg img{display:block;text-align:center;width:140px;height:140px; }
          .pay_explain{text-align:center;margin:10px auto;font-size:12px;color:#545454;}
          .radiobox{width: 16px;height: 16px;background: url('img/radio2.jpg');display: block;float: left;margin-top: 5px;margin-right: 14px;}
          .checked .radiobox{background:url('img/radio1.jpg');}
          .shang_payselect{text-align:center;margin:0 auto;margin-top:40px;cursor:pointer;height:60px;width:280px;}
          .shang_payselect .pay_item{display:inline-block;margin-right:10px;float:left;}
          .shang_info{clear:both;}
          .shang_info p,.shang_info a{color:#C3C3C3;text-align:center;font-size:12px;text-decoration:none;line-height:2em;}
    
       </style>
    </head>
    <body>
    <div class="content">
       <p><a href="javascript:void(0)" onClick="show_wx()" class="dashang" title="支付">微信支付</a></p>
       <div class="hide_box"></div>
       <div class="shang_box">
          <a class="shang_close" href="javascript:void(0)" onClick="hide_wx()" title="关闭"><img src="source/plugin/xigua_re/static/close.jpg" alt="取消" /></a>
          <div class="shang_tit">
             <p>微信充值扫码</p>
          </div>
          <div class="shang_payimg">
    
          </div>
          <div class="shang_payselect">
    
             <div class="pay_item" id="weipay" style="display: none">
                <span class="radiobox"></span>
                <span class="pay_logo" ><img src="static/wechat.jpg" alt="微信" /><span style="position: absolute;bottom:24px;font-size: 19px; font-weight: 600;">成功</span></span>
             </div>
          </div>
    
       </div>
    </div>
    <script type="text/javascript">
    
       if(typeof jq == 'undefined'){
          var jq = jQuery.noConflict();
       }
    
       var wechat_checkST1 = null, wechat_checkCount1 = 0;
    
       function  show_wx(){
          jq.get('act=weixin', function(res) {
    //       console.log(res.order_id,res.img);
    
             var order_id=res.order_id;
    //       console.log(order_id);
             if(res.img){
    //          console.log(order_id);
                wechat_checkST1 = setInterval(function(){
    
                   check_order(order_id);
    
                }, 2000);
                jq('.shang_payimg').html(res.img);
             }
          },'json');
    
          jq(".shang_box").show();
       }
    
       function hide_wx(){
    
          clearTimeout(wechat_checkST1);
          jq(".shang_box").hide();
       }
    
       function check_order(order_id){
    
          jq.get('check&order_id='+order_id, function(s) {
    
             if(s=='1'){
    
                jq("#weipay").show();
    
                setTimeout(function(){
                   hide_wx();
                   console.log('支付成功')
    
                },1200);
    
    
    
             }
          });
    
       }
    
    </script>
    </body>
    
    </html>
    
    
    act  请求地址是 返回微信的 二维码   就是生成二维码 
    后台 act 代码


    if($_REQUEST['act']=='weixin'){
        $order_id = C::t('')->get_order_id(
            $fromopenid, $_G['uid'], $touid, $toopenid,
            $price*100,
            $_GET['subject'], $_GET['url'],$_GET['postid'], $_G['cookie']['rewxnickname'], $_G['cookie']['rewxheadimgurl'], 1,1,1);
        if(!$order_id){
            exit('order_id empty!');
        }
        $body = diconv($navtitle, CHARSET, 'UTF-8');
        $body='账号充值';
        $notify = new NativePay();
        $input = new WxPayUnifiedOrder();
        $input->SetBody($body);
        $input->SetAttach($body);
        $input->SetOut_trade_no($order_id);
        $input->SetTotal_fee($price*100);
        $input->SetTime_start(date("YmdHis"));
    //    $input->SetTime_expire(date("YmdHis", time() + 3600));
        $input->SetGoods_tag($body);
        $input->SetNotify_url($_G['siteurl']. 'addmoney_notify_wx.php'); //这个是回调很重要
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id($order_id);
        $result = $notify->GetPayUrl($input);
        $url2 = $result["code_url"];
    
        if(!$url2){
            $img = diconv($result['return_msg'],'UTF-8',CHARSET );
        }else{
            if(class_exists('QRcode')){
                $qrfile = '/cache/o'.$order_id.'.png';
                QRcode::png($url2, DISCUZ_ROOT.$qrfile, QR_ECLEVEL_L, 3);
                $src = $_G['siteurl'].$qrfile;
            }else{
                $src= 'http://qr.liantu.com/api.php?&w=240&bg=ffffff&fg=333333&text='.urlencode($url2);
            }
            $errorsrc= 'http://qr.liantu.com/api.php?&w=240&bg=ffffff&fg=333333&text='.urlencode($url2);
            $img =  "<img src='$src' οnerrοr=\"this.error=null;this.src='$errorsrc'\" class=\"payqrcode\" /><p class=\"xg1\" style='margin:10px auto!important;'>".lang('plugin/xigua_re', 'sao')."</p>";
        }
    
       echo json_encode(array('order_id'=>$order_id,'img'=>$img));
    
        die;

    异步回调验证 


    addmoney_notify_wx.php

    
    
    <?php
    
    
    define('IN_API', true);
    define('CURSCRIPT', 'api');
    define('DISABLEXSSCHECK', true);
    
    require_once 'class/class_core.php';
    $discuz = C::app();
    $discuz->init();
    
    $_G['siteurl'] = str_replace('', '',$_G['siteurl'] );
    require_once 'common.php';
    
    //ini_set('display_errors', 1);
    //error_reporting(E_ALL ^ E_NOTICE);
    //$re = WxPayApi::promotion('201602022028434331035', 'ohvWAwxEy3M9CvZB5J4HFDuOk8Nc', 100, 'test');
    //$re['return_msg'] = diconv($re['return_msg'],'UTF-8', CHARSET);
    //$re['err_code_des'] = diconv($re['err_code_des'],'UTF-8', CHARSET);
    //var_dump($re);
    //if($re['return_code'] == 'SUCCESS'){
    
    //}else{
    //
    //}
    
    
    $notifydata = re_notifycheck();
    
    @file_put_contents('./aaa.text',print_r($_REQUEST,true));
    
    if($notifydata['validator']) {
        
        //这里面 开始写成功之后的业务逻辑 比如 改变订单状态
        $order_id = $notifydata['order_no'];
    
    }
    function re_notifycheck() {
        global $_G;
    
        $msg = '';
    
        $notify = WxPayApi::notify($msg);
    
        if(empty($notify)){
            $return = array(
                'return_code'=>'FAIL',
                'return_msg'=>$msg,
            );
            WxPayApi::replyNotify(arr2xml($return));
            exit;
        }
    
        //checksign
        $sign = $notify['sign'];
        unset($notify['sign']);
    
        ksort($notify);
        $string = reToUrlParams($notify);
        $string = $string . "&key=".WxPayConfig::KEY;
        $string = md5($string);
        $result = strtoupper($string);
        if($result != $sign){
            $return = array(
                'return_code'=>'FAIL',
                'return_msg'=> 'sign error!',
            );
            WxPayApi::replyNotify(arr2xml($return));
            exit;
        }
        if($notify['result_code'] == 'SUCCESS') {
            return array(
                'validator'    => isset($notify['result_code']) && $notify['result_code'] == 'SUCCESS' ? 1 : 0,
                'order_no'     => $notify['out_trade_no'],
                'trade_no' => isset($notify['transaction_id']) ? $notify['transaction_id'] : '',
                'price'    => $notify['total_fee'],
                'appid' => $notify['appid'],
                'notify'   => arr2xml(array('return_code'=>'SUCCESS')),
                'location' => false,
                'fromopenid' => $notify['openid'],
            );
        }
    }
    
    
    function arr2xml($data){
        $xml = "<xml>";
        foreach ($data as $key=>$val)
        {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml;
    }

    check.php 

    检测是否支付成功!

    传到前面的是订单号。

    拿订单号去 后台验证

    <?php
    
    $order_id = $_GET['order_id'];
    $order = C::t('a')->fetch_by_order_id($order_id);
    
    $succeed = 0;
    if($order && $order['paystatus'] == 1){
    
    
       $succeed = 1;
    }
    
    echo $succeed;
    
    die;
    响应那个一直请求 当验证通过时候 就 跳转 停止请求 支付完成。
    
    





    展开全文
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别?...
  • 使用此状态不是必须的,而且只有在响应不使用此状态便会返回 200 OK 的情况下才是合适的。 204 No Content   服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能...
  • 2020最新Java常见面试题及答案

    万次阅读 多人点赞 2019-10-26 15:53:35
    八、网络 79.http 响应码 301 和 302 代表的是什么?有什么区别? 80.forward 和 redirect 的区别? 81.简述 tcp 和 udp的区别? 82.tcp 为什么要三次握手,两次不行吗?为什么? 83.说一下 tcp 粘包是怎么产生的?...
  • 计算机组成原理

    万次阅读 多人点赞 2019-06-02 14:13:55
    国标用于表示汉字,每个汉字占用2个字节,四位十六进制数表示。 在计算机内部,存储时要转换成机内码,转换方法: 34 73 +80 80 = B4 F3 习题: 1、写出十进制数-35的8位补码定点数 X= - 35D = - 10 0011B ...
  • Java框架总结

    万次阅读 多人点赞 2020-01-17 14:14:13
    (2)mybatis的优点 与JDBC相比,减少了50%以上的代码量。 mybatis是最简单的持久化框架,小巧并且简单易学。 mybatis灵活,不会对应用程序或者数据库的限售设计强加任何影响,SQL写在XML里,从程序代码中彻底分离...
  • 前端面试题(持续更新中)

    万次阅读 多人点赞 2019-11-06 17:16:33
    Expires中进行了指定的情况下, 这个响应才是可缓存的 304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上 次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态。...
  • 实现一、原理:要让div等块级元素水平和垂直居中,必需知道该div等块级元素的宽度和高度,然后设置位置为绝对位置,距离页面窗口左边框和上边框的距离设置为50%,这个50%就是指页面窗口的宽度和高度的50%,最后将该...
  • 前端面试锦集

    千次阅读 多人点赞 2019-07-20 13:41:45
    状态有哪些 作用是什么 404 401 400 500 200 302等 ajax请求实现的过程: AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不...
  • 华中科技大学计算机组成原理慕课答案

    万次阅读 多人点赞 2020-01-26 00:09:18
    读操作也要考虑CaChe与主存的一致性问题 D.CaChe对程序员透明 50、下列关于CaChe的论述中,正确的是( B ) A.CaChe的容量与主存的容量差距越大越能提升存储系统的等效访问速度 B.采用直接映射时,CaChe无需使用替换...
  • JMeter

    千次阅读 多人点赞 2019-09-18 16:45:42
    Label:每个 JMeter 的 请求都有一个 Name 属性,这里显示的就是 Name 属性的值 #Samples:表示本次测试中一共发出了多少个请求 Average:平均响应时间 Median:也就是 50% 用户的响应时间 90%Line:90%...
  • 基于SSM的校园二手交易平台的设计与实现

    万次阅读 多人点赞 2018-05-06 14:24:44
    3 详细设计 3.1 数据字典 用户信息表 字段名 字段类型 是否可为空 备注 Id Int(11) 否 主键 Modify Datetime 是 修改时间 Username Varchar(50) 否 用户昵称 Phone Char(11) 否 用户手机号码 realName Varchar(20) ...
  • JavaScript + CSS/CSS3 + HTML 网页登陆 + 注册界面设计

    万次阅读 多人点赞 2019-02-01 12:05:12
    ... 撸代码之前先来看一看效果图: ...需要做浏览器(Firefox、Safari and Chrome、Opera)兼容处理和 @media 简单响应式设计。文本输入框做了 required 必须填写条件,运用在项目中可以通过 JavaScript 约束验证 DO...
  • 单片机 数字电压表(ADC0809)

    万次阅读 多人点赞 2018-06-02 11:42:44
    //调用显示程序 } } /**********************************************************/ //函数名:timer() interrupt 1 //功能:定时中断0响应程序 //调用函数: //输入参数: //输出参数: //说明:为ADC提供时钟信号...
  • 微信小程序开发教程手册文档

    万次阅读 多人点赞 2018-06-28 14:25:48
    index.js 是页面的脚本文件,在这个文件中我们可以监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。 //index.js //获取应用实例 var app = getApp() Page({ data: { ...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏  Java编写的网页版魔方游戏,编译后...
  • 史上最全面Java面试汇总(面试题+答案)

    万次阅读 多人点赞 2018-07-06 14:09:25
    多态:允许不同类的对象对同一消息做出响应。方法的重载、类的覆盖正体现了多态。 3.重载和重写的区别 重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以...
  • 基于MATLAB的语音信号处理

    万次阅读 多人点赞 2018-07-15 01:21:20
    但是,由于不同的语音是由人的口腔肌肉运动构成声道某种形状而产生的响应,而这种口腔肌肉运动相对于语音频率来说是非常缓慢的,所以从另一方面看,虽然语音倍号具有时变特性,但是在一个短时间范围内 ( 一般认为在 ...
  • 移动web开发笔记

    万次阅读 2016-05-15 20:12:27
    在上述中间隔 50 毫秒尝试去执行 doScroll,注意,由于页面没有加载完成的时候,调用 doScroll 会导致异常,所以使用了 try -catch 来捕获异常。 结论:所以总的来说当页面 DOM 未加载完成时,调用 doScroll 方法...
  • 分别访问http://test.ttlsa.com/ttlsa_http_code_status502/和http://test.ttlsa.com/ttlsa_http_code_status500来制造一个500和502的状态码,以及随意访问一个页面制造404响应码,一切都是为了测试。 测试输出内容...
  • 《单片机原理及应用》复习提纲

    万次阅读 多人点赞 2015-12-14 10:42:02
    BCD的两种存储格式(压缩和非压缩形式)     1)压缩BCD : 用4位二进制数表示1位十进制数,一个字节表示2位十进制数。   例如10010111B表示十进制数97。   2)非压缩BCD : 用8位二...
  • 大家在搭建网站时经常会遇到各类问题, 其中最常见的就是各类 40X 50X 报错, 这里 简单介绍一下各类报错的意义以及解决方法。在介绍报错前,先简单介绍下 http 协议的常 见返回,这些返回可以通过 http 抓包...
  • 相关Matlab代码和Simulink仿真文件请关注公众号:迈微电子研发社(左侧或下方微信扫即可)回复“PID算法”,获取免费下载链接 相关阅读 深入浅出PID控制算法(一)————连续控制系统的PID算法及MATLAB仿真 ...
  • Nginx code 状态说明

    千次阅读 2018-06-11 11:14:44
    From: https://www.cnblogs.com/kevingrace/p/7205623.html 最近了解下Nginx的Code状态,在此简单总结下。一个http请求处理流程:一个普通的http请求处理流程,如上图所示:A -&gt; client端发起请求给nginx...
  • BELLHOP 关于Actup冲激响应的绘制

    千次阅读 热门讨论 2018-04-17 16:35:53
    很多同学在BELLHOP Actup原指南中找不到 BELLHOPdata.m 文件,同时存在程序... 这里在Matlab代码中再次详细说明BELLHOP 关于Actup冲激响应的绘制。(1)首先利用Actup得到幅度和相位.arr文件。详细配置方式请参考本...
  • 当Apache服务器发生处理错误时,也就是说在response statsu code 是40x和50x系的时候,希望服务器能检测到,并且执行一个PHP代码,发送邮件给管理者。结果由于对Nginx的配置不是很熟悉只是在Nginx的配置文件上error_...
  • #log_format main '$request_body' log_format main escape=json '请求报文 :$request_body | 响应报文:"$resp_body"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,185
精华内容 45,674
关键字:

响应码50