苹果支付。将 PKPaymentToken 发送到服务器时缺少必填字段。目标-c/斯威夫特

问题描述 投票:0回答:0

我向其发送接收到的 PKPaymentToken 的服务器返回错误: “处理支付数据时出错。解密数据中缺少必填字段。” 通过 Authorize.net 付款 我在网络上从事 Apple Pay 集成工作的同事说,应该首先实施商家验证。但是我找不到关于 iOS 的任何信息。看起来我发送的数据应该足够了,但事实并非如此。

这是我的代码

PKPaymentAuthorizationViewController 配置

- (IBAction)applePayButtonPressed:(id)sender {
NSLog(@"applePayPressed");
PKPaymentRequest* request = [PKPaymentRequest new];
request.merchantIdentifier = @"merchant.gamma.company";
request.currencyCode = @"USD";
request.countryCode = @"US";

NSString *totalValue = [_totalCostStaticField.text substringFromIndex:1];
NSDecimalNumber *totalAmount = [NSDecimalNumber decimalNumberWithString: totalValue];
self.total = [PKPaymentSummaryItem summaryItemWithLabel:@"ItsEasy services" amount:totalAmount type:PKPaymentSummaryItemTypeFinal];
request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkDiscover, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];

request.merchantCapabilities = PKMerchantCapability3DS;
NSArray* summaryItems = [NSArray arrayWithObjects:self.total, nil];
request.paymentSummaryItems = summaryItems;

PKPaymentAuthorizationViewController *paymentVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
if (!paymentVC) { NSLog(@"PKPaymentAuthorizationViewController ===== nil"); }
paymentVC.delegate = self;
[self presentViewController:paymentVC animated:true completion:nil];

}

获取支付数据,添加额外参数并发送到服务器

- (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                    didAuthorizePayment:(PKPayment *)payment
                             completion:(void (^)(PKPaymentAuthorizationStatus))completion {
NSError *error;

if (payment.token.paymentData)
{
    NSMutableDictionary *parameters = [[NSMutableDictionary alloc]initWithCapacity:10];
    
    NSString *jsonString = [[NSString alloc] initWithData:payment.token.paymentData encoding:NSUTF8StringEncoding];
    NSString *cardName = payment.token.paymentMethod.displayName;
    NSString *m_CCLast4 = [cardName substringFromIndex: [cardName length] - 4];
    
    [parameters setObject:[self encodeStringTo64:jsonString] forKey:@"paymentData"];
    [parameters setObject:m_CCLast4 forKey:@"m_CCLast4"];
    
    [self submitWithApplePay:parameters]; // send paymentData with extra parameters to the server
    
    completion(PKPaymentAuthorizationStatusSuccess);
}
else
{
    NSLog(@"paymentData == 0");
    NSLog(@"Got an error: %@", error);
}

}

编码为base64

- (NSString*)encodeStringTo64:(NSString*)fromString {
NSData *plainData = [fromString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String;
base64String = [plainData base64EncodedStringWithOptions:kNilOptions];

return base64String;

}

ios swift objective-c authorize.net applepay
© www.soinside.com 2019 - 2024. All rights reserved.