- 統一下單的參數要拼接成XML格式,使用AFN請求時要對參數轉義,直接傳入字典給AFN無法識別(這個接口微信demo中並沒有提供示例)
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //這里傳入的xml字符串只是形似xml,但是不是正確是xml格式,需要使用af方法進行轉義 manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init]; [manager.requestSerializer setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:@"https://api.mch.weixin.qq.com/pay/unifiedorder" forHTTPHeaderField:@"SOAPAction"]; [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { return xml; }];
- 解析統一下單會返回一個prepay_id字段,在調起支付接口中作為傳入參數。
- 注意統一下單返回的數據是XML格式的數據,並且使用了"<![CDATA[" 開始,由 "]]>"轉義,解析器會忽略CDATA中的數據,用常規方式無法解析。
可以使用這個代理方法
- (void)parser:(__unused NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
捕捉到xml中忽略的字符串,對忽悠字符進行解析。
- 簽名最容易出錯,嚴格按照官方給出的簽名算法來,簽名后可以將結果拿到微信提供網頁上對比,和網頁生成的一致即可。(簽名錯誤的時候,會調轉到微信app出現一個“確認”按鈕,點擊后又跳回商戶app)
- "調起支付接口"官網提供的請求參數有7個,實際上只需要6個,不需要appid這個參數,但在簽名時,需要appid進行簽名。