流程參照支付寶開放平臺的文檔--1.導入代碼,2.針對Demo的運行注意,3.配置基本信息,支付寶SDK下載
ios 審核不通過的時候,出現因為蘋果不支持app里的支付寶支付的時候,只能讓后臺做一個網頁連接請求連接到服務器,進入支付寶的支付網頁即可。
#pragma mark--------------------------------------------------------支付寶網頁支付請求
- (void)sendAlipayWebsiteRequest{
if(self.userInfo.LogginType==YES) {
self.alipayUrl= [NSURLURLWithString:kALIPAYWEBSITESTR];
}else{
self.alipayUrl= [NSURLURLWithString:kTERISTALIPAYWEBSITESTR];
}
UIWebView* webView = [[UIWebViewalloc]initWithFrame:self.view.bounds];
[webViewloadRequest:[NSURLRequestrequestWithURL:self.alipayUrl]];
[self.viewaddSubview:webView];
}
libcrypto.a,libssl.a這兩個文件不添加也會報錯。
參數問題:
下面訂單的一些信息
#pragma mark--------------------------------------------------生成支付寶訂單信息
- (void)setUpOrderString{
/*=======================需要填寫商戶app申請的===================================*/
/*============================================================================*/
NSString*partner =@"208";
NSString*seller =@"chari@126.com";
NSString*privateKey =@"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMpvwt77vLxpHAm9+PwIaM+RU2/gw==";
以上三個參數后臺必須給你的
/*
*生成訂單信息及簽名
*/
//將商品信息賦予AlixPayOrder的成員變量
Order*order = [[Orderalloc]init];
order.partner= partner;
order.seller= seller;
order.tradeNO=self.pdr_sn;
order.productName=self.pdr_sn;;//商品標題
order.productDescription=self.pdr_sn;//商品描述
order.amount=self.moneyTextField.text;//商品價格
order.notifyURL=@"http://www.1paper.org/mobile/api/payment/alipay/app_notify_url.php";//回調URL(這個網址可以自己設置)
//以下幾個是固定值。
order.service=@"mobile.securitypay.pay";
order.paymentType=@"1";
order.inputCharset=@"utf-8";
order.itBPay=@"30m";
order.showUrl=@"m.alipay.com";
//應用注冊scheme,在AlixPayDemo-Info.plist定義URL types
NSString* appScheme =@"OnePieceOfPaper";
//將商品信息拼接成字符串
NSString*orderSpec = [orderdescription];
DDLogVerbose(@"orderSpec = %@",orderSpec);
//獲取私鑰并將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規范,并將簽名字符串base64編碼和UrlEncode
id signer =CreateRSADataSigner(privateKey);
NSString*signedString = [signersignString:orderSpec];
DDLogVerbose(@"key:%@",signedString);
//將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
NSString*orderString =nil;
if(signedString !=nil) {
orderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString,@"RSA"];
DDLogVerbose(@"dealInfo:%@",orderString);
//支付寶的拉起操作
//---------------------------------------------//
//orderString:一個字符串,這個字符串包含了訂單信息.通常來說為了安全起見,我們不會在客戶端拼接訂單信息,當要支付時,向服務器請求訂單信息
[[AlipaySDKdefaultService]payOrder:orderStringfromScheme:appSchemecallback:^(NSDictionary*resultDic) {
DDLogVerbose(@"支付結果= %@",resultDic);
if([resultDic[@"ResultStatus"]isEqualToString:@"9000"]) {
//支付成功,這里放你們想要的操作
[selfshowAlert:@"支付成功"];
}else{
[selfshowAlert:@"支付失敗"];
}
}];
}
}
最后,在appdelegate
#pragma mark------------------------------------------------------支付寶支付
//支付寶支付回調
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
//如果極簡開發包不可用,會跳轉支付寶錢包進行支付,需要將支付寶錢包的支付結果回傳給開發包
if([url.hostisEqualToString:@"safepay"]) {
[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {
//【由于在跳轉支付寶客戶端支付的過程中,商戶app在后臺很可能被系統kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法里面處理跟callback一樣的邏輯】
DDLogVerbose(@"result = %@",resultDic);
[selfsendAliPayRequest];
}];
}
if([url.hostisEqualToString:@"platformapi"]){//支付寶錢包快登授權返回authCode
[[AlipaySDKdefaultService]processAuthResult:urlstandbyCallback:^(NSDictionary*resultDic) {
//【由于在跳轉支付寶客戶端支付的過程中,商戶app在后臺很可能被系統kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法里面處理跟callback一樣的邏輯】
DDLogVerbose(@"result = %@",resultDic);
[selfsendAliPayRequest];
}];
}
returnYES;
}