RingCentral在发送传真时给出错误“[OutboundFaxes]”

时间:2018-05-11 11:21:02

标签: api fax ringcentral

我正在尝试使用POSTMAN使用以下网址"https://platform.devtest.ringcentral.com/restapi/v1.0/account/~/extension/****88004/fax"发送传真 而且我得到了:

{
    "errorCode": "CMN-408",
    "message": "In order to call this API endpoint, user needs to have [OutboundFaxes] permission for requested resource.",
    "errors": [
        {
            "errorCode": "CMN-408",
            "message": "In order to call this API endpoint, user needs to have [OutboundFaxes] permission for requested resource.",
            "permissionName": "OutboundFaxes"
        }
    ],
    "permissionName": "OutboundFaxes"
}

2 个答案:

答案 0 :(得分:2)

发送传真请求时,承载令牌出现问题。

因为我使用主要帐户详细信息来生成令牌,并且在发送传真时我使用了扩展名102的扩展名,并且使用主帐户扩展101生成了承载令牌。这就是它抛出[OutboundFaxes]权限错误的原因。

要使用扩展名为102的ExtensionId发送传真,请使用子帐户102详细信息而不是主帐户生成令牌。

答案 1 :(得分:1)

我已成功复制了这个问题。

test case

根本原因正是@Jack所说的:使用扩展名101授权然后尝试发送带有扩展名102的传真。

错误消息是

  func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
    if challenge.protectionSpace.authenticationMethod == (NSURLAuthenticationMethodServerTrust) {


        let serverTrust:SecTrust = challenge.protectionSpace.serverTrust!
        let certificate: SecCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0)!
        let remoteCertificateData = CFBridgingRetain(SecCertificateCopyData(certificate))!
        let cerPath: String = Bundle.main.path(forResource: "xxxxx", ofType: "der")!
        let localCertificateData = NSData(contentsOfFile:cerPath)!
        print(localCertificateData.length)
        let result  = remoteCertificateData.isEqual(localCertificateData as Data)
        let certDataRef = localCertificateData as! CFData
        var cert: SecCertificate = SecCertificateCreateWithData(nil, certDataRef)!
        let certArrayRef = CFArrayCreate(nil, cert, 1, nil)
        SecTrustSetAnchorCertificates(serverTrust, certArrayRef)

        SecTrustSetAnchorCertificatesOnly(serverTrust, false)
        print(result)
        var trustResult: SecTrustResultType = SecTrustResultType.invalid
        SecTrustEvaluate(serverTrust, &trustResult)
        if (trustResult == SecTrustResultType.unspecified ||
            trustResult == SecTrustResultType.proceed)
        {
            let credential:URLCredential = URLCredential(trust: serverTrust)
            challenge.sender?.use(credential, for: challenge)
            completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))

        } else {

            completionHandler(URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil)
        }
    }
    else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate
    {
        let path: String = Bundle.main.path(forResource: "client", ofType: "p12")!
        let PKCS12Data = NSData(contentsOfFile:path)!
        let identityAndTrust:IdentityAndTrust = self.extractIdentity(certData: PKCS12Data);
        let urlCredential:URLCredential = URLCredential(
            identity: identityAndTrust.identityRef,
            certificates: identityAndTrust.certArray as? [AnyObject],
            persistence: URLCredential.Persistence.forSession);
        completionHandler(URLSession.AuthChallengeDisposition.useCredential, urlCredential);
    }
    else
    {
        completionHandler(URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil);
    }
}

我认为错误信息需要改进。通过阅读来找出根本原因非常困难。我已将此问题报告给RingCentral工程团队。