我的swift HTTP POST请求没有被PHP api正确处理

时间:2018-02-05 16:30:24

标签: swift http-post

我正在尝试向PHP api发送帖子请求。我需要能够以Json格式发送请求。 PHP文件收集邮件请求,如下所示:

$postBody = $_POST ['request'];
$signature = $_POST ['signature'];
$rpcRequest = json_decode ( $postBody, true );

我需要构建一个格式化的请求,以便api可以读取我的信息。我正在建立我的请求:

//Here I am building the request as a string. This string is used to get the signature. 
var params = 
        """
        {"method":"phoneNumberVerificationStart","params":{"number":"\(PhoneNumber)"},"id":1}
        """
//here I build the request by using a dictionary. 
var jsonParams = ["request": ["method": "phoneNumberVerificationStart","id": 1, "params": ["number": "\(PhoneNumber)"] ]] as NSMutableDictionary

let urlString = "******************************"

//below is just hashing the params into sha256
let hashedParams = sha256(request: params)
let signature = hashedParams.hexEncodedString()

//Take what was just hashed and put it into the signature variable
jsonParams["signature"] = signature

//jsonData takes my built dictionary and turns it into a json format to be sent. 
let jsonData = try? JSONSerialization.data(withJSONObject: jsonParams, options: .prettyPrinted)

guard let requestURL = URL(string:urlString) else{return}
let session = URLSession.shared

// Set up the post request to send to the server. 
let request = NSMutableURLRequest(url:requestURL)
request.httpMethod = "POST"

// Add the jsonData to the body of the http request. This data is json and when printed out in string form it looks like this:
// ( {"request":{"id":1,"method":"phoneNumberVerificationStart","params":{"number":"**********"}},"signature":"2ebdd87bdc66a04419bfd60e7c9b257039bf66dacd1623a1995c971e7cb68ed6"}
//For some odd reason Id shifts up to the front of the json file? 
request.httpBody =  jsonData
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")


print(String(data: request.httpBody!, encoding: .utf8)!)


//After this I send the request the server does not understand my post request
let task = session.dataTask(with: request as URLRequest){
            (data,respone, error) in
            if error != nil {
                print(error?.localizedDescription)
                //print(String(data:myData!,encoding: .utf8)!)
            }
            do{

                print (String(data: data!, encoding: .utf8)!)


            }

我在想我的问题是请求不是作为json对象而是作为原始数据发送的。我收到来自服务器的错误,它无法找到字段' request'或者'签名'。

0 个答案:

没有答案