IOS(ShareSDK)微信丶支付寶集成細節

ps:先來支付寶的。首先集成支付寶的SDK,這個真心是運氣加上技術相結合才行~有時候一樣的工程,就是給你報錯~你能耐他何?然后第二天運行同樣的工程,錯誤消失了~就是這么的神奇!詳細的集成流程就不說了,簡單大致提一下首先第一步要去與支付寶簽約,獲得商戶ID也就是合作者身份,之后就開始下載官方文檔與示例damo了,一步步按著官方文檔來就行了.

PS:好了,運行之后就應該剩下一個報錯了,這個報錯有點麻煩,需要導入路徑,讓系統找到這個文件還是先把報錯放出來吧

PS:下面是解決辦法

PS:如果運行后openssl這個錯誤還是存在的話,那就不好意思了~重新導入吧~或者睡上一覺擼上一局吧~反正我是真切體會過的,晚上集成了幾次都是剩下這個錯,第二個重新運行,居然就可以了~就是真么的神奇。然后到獲取以及上傳公鑰和私鑰的問題了。






PS:然后是下載下來就是這個樣子的




然后就搞定了啊~~由于現在網上的支付寶Demo都是在工程中簽名加密的~所以這里我就不展示了~而且沒用,現在的公司根本不會把簽名加密放在工程當中了。所以我就以后臺簽名加密為例子。首先和后臺商量如何給我返回數據,先上接口。

支付寶APP支付申請加簽

調用接口(post)

www.401VN.com

請求參數

key (會員登錄令牌)

pay_sn 支付編號

subject 訂單主題描述信息

amount 訂單金額

返回數據

resulr (參數字符串-加簽之后的結果串)

apedcome

支付寶APP支付結果驗簽

調用接口(post)

www.401VN.com

請求參數

key (會員登錄令牌)

alipay_resp 支付結果內的response數據串

resultStatus 結果狀態碼

sign_type 簽名類型

sign 簽名數據

返回數據

'1' 支付結果:成功

第一條接口是申請加簽的接口,這條接口我們需要把訂單的信息傳給后臺,讓后臺進行簽名。然后給我們返回加簽的結果。

首先這個第一條接口寫在點擊支付寶支付的那個按鈕的點擊方法哪里。

[NetWorkingpostWithUrlString:zhifubao_Signaparameters:prccsuccess:^(iddata) {

NSLog(@"網絡請求成功");

[HUDhideAnimated:YES];

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"支付寶加簽后返回的數據==%@",dict);

//NSLog(@"打斷之后的數據=%@",arr);

if([dict[@"msg"]isEqualToString:@"1"]) {

//應用注冊scheme,在AliSDKDemo-Info.plist定義URL types

NSString*appScheme =@"alipay2016111902989697";

// NOTE:將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式

NSString*orderString = dict[@"datas"][@"retstr"];

// NOTE:調用支付結果開始支付

[[AlipaySDKdefaultService]payOrder:orderStringfromScheme:appSchemecallback:^(NSDictionary*resultDic) {

NSLog(@"支付寶回調后給我返回的數據源==%@",resultDic);

}];

}

}failure:^(NSError*error) {

NSLog(@"網絡請求失敗");

[HUDhideAnimated:YES];

}];

然后就是調用支付寶SDK的方法了。也就是下面的方法。

//該方法9.0以前的API接口

- (BOOL)application:(UIApplication*)application

openURL:(NSURL*)url

sourceApplication:(NSString*)sourceApplication

annotation:(id)annotation

{

if([url.hostisEqualToString:@"safepay"]) {

//支付跳轉支付寶錢包進行支付,處理支付結果

[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"APPDelegate里面的result = %@",resultDic);

//9000代表是成功的意思,這是支付寶官方認定的,別問為什么!還有一點,這個9000是支付寶給你返回的支付成功信息,強烈不建議前端直接就以這個9000為標準判斷支付成功,應該把這個字典傳給后臺,讓后臺記錄判斷之后,再給前端返回!前端再顯示結果給用戶知道。切記切記!!!

if([resultDic[@"resultStatus"]isEqualToString:@"9000"]) {

//然后和后臺商量,支付寶給我們返回的一個字典要怎么傳給后臺,是直接就傳了,還是說要再做點什么修改,我這里就修改了,麻煩的一比。

NSString* str =resultDic[@"result"];

NSString*d5 = [strstringByReplacingOccurrencesOfString:@"\""withString:@""];

NSString* d6 = [d5stringByReplacingOccurrencesOfString:@"{"withString:@""];

NSString* d7 = [d6stringByReplacingOccurrencesOfString:@"}"withString:@""];

NSString* d8 = [d7stringByReplacingOccurrencesOfString:@"alipay_trade_app_pay_response:"withString:@""];

NSUserDefaults* user = [NSUserDefaultsstandardUserDefaults];

NSDictionary* dic = [userobjectForKey:@"sss"];

NSString* kkk = dic[@"datas"][@"key"];

NSMutableDictionary* prcc = [NSMutableDictionarydictionaryWithCapacity:10];

[prccsetValue:kkkforKey:@"key"];

[prccsetValue:[NSStringstringWithFormat:@"%@",d8]forKey:@"alipay_resp"];

[prccsetValue:resultDic[@"resultStatus"]forKey:@"resultStatus"];

[prccsetValue:@"RSA"forKey:@"sign_type"];

[prccsetValue:@"sX6/UzkKOjiCNbUPiXX1jMEdCggqGIOwnCzDEgBndSATW/9Q9rke7ubhxNxHbRhMLAtiCQchG15hw93A+pH1w3vZ60/DLh99JD7NUEqE9qOiHnV5INZ+zFzNVkuR4S9xZovSp8MAkmEVlsD6sT7fhOxPi1VRSkBM/wD3iUA/iEY="forKey:@"sign"];

//然后這里就調用了第二條接口。返回結果如果成功了,就直接調用通知,跳轉到指定的界面。

[NetWorkingpostWithUrlString:zhifubao_Resultparameters:prccsuccess:^(iddata) {

NSLog(@"網絡請求成功");

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"成功了嗎!!!!!%@",dict);

if([dict[@"msg"]isEqualToString:@"1"]) {

NSLog(@"的確是1111");

//創建通知

NSNotification*notification =[NSNotificationnotificationWithName:@"tongzhi"object:niluserInfo:dict];

//通過通知中心發送通知

[[NSNotificationCenterdefaultCenter]postNotification:notification];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付結果"message:@"支付成功"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}else{

NSLog(@"支付結果上傳服務器失敗");

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付結果"message:@"支付失敗"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}

}failure:^(NSError*error) {

NSLog(@"網絡請求失敗");

}];

}else{

//創建通知

NSNotification*notificatio =[NSNotificationnotificationWithName:@"DefeatZhifubao"object:niluserInfo:nil];

//通過通知中心發送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificatio];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付結果"message:@"支付失敗"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}

}];

//授權跳轉支付寶錢包進行支付,處理支付結果

[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"result = %@",resultDic);

//解析auth code

NSString*result = resultDic[@"result"];

NSString*authCode =nil;

if(result.length>0) {

NSArray*resultArr = [resultcomponentsSeparatedByString:@"&"];

for(NSString*subResultinresultArr) {

if(subResult.length>10&& [subResulthasPrefix:@"auth_code="]) {

authCode = [subResultsubstringFromIndex:10];

break;

}

}

}

NSLog(@"授權結果authCode = %@", authCode?:@"");

}];

}

//下面的這個是微信調用的方法!沒錯!微信就是這么一小句話就調用起來了!

return[WXApihandleOpenURL:urldelegate:self];

returnYES;

}

//下面這個方法是9.0以后的API的接口

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options

{

if([url.hostisEqualToString:@"safepay"]) {

//支付跳轉支付寶錢包進行支付,處理支付結果

[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"9.0以后的新接口API:result = %@",resultDic);

NSLog(@"1111111111");

//9000代表是成功的意思,這是支付寶官方認定的,別問為什么!還有一點,這個9000是支付寶給你返回的支付成功信息,強烈不建議前端直接就以這個9000為標準判斷支付成功,應該把這個字典傳給后臺,讓后臺記錄判斷之后,再給前端返回!前端再顯示結果給用戶知道。切記切記!!!

if([resultDic[@"resultStatus"]isEqualToString:@"9000"]) {

//然后和后臺商量,支付寶給我們返回的一個字典要怎么傳給后臺,是直接就傳了,還是說要再做點什么修改,我這里就修改了,麻煩的一比。

NSString* str =resultDic[@"result"];

NSString*d5 = [strstringByReplacingOccurrencesOfString:@"\""withString:@""];

NSString* d6 = [d5stringByReplacingOccurrencesOfString:@"{"withString:@""];

NSString* d7 = [d6stringByReplacingOccurrencesOfString:@"}"withString:@""];

NSString* d8 = [d7stringByReplacingOccurrencesOfString:@"alipay_trade_app_pay_response:"withString:@""];

NSUserDefaults* user = [NSUserDefaultsstandardUserDefaults];

NSDictionary* dic = [userobjectForKey:@"sss"];

NSString* kkk = dic[@"datas"][@"key"];

NSMutableDictionary* prcc = [NSMutableDictionarydictionaryWithCapacity:10];

[prccsetValue:kkkforKey:@"key"];

[prccsetValue:[NSStringstringWithFormat:@"%@",d8]forKey:@"alipay_resp"];

[prccsetValue:resultDic[@"resultStatus"]forKey:@"resultStatus"];

[prccsetValue:@"RSA"forKey:@"sign_type"];

[prccsetValue:@"sX6/UzkKOjiCNbUPiXX1jMEdCggqGIOwnCzDEgBndSATW/9Q9rke7ubhxNxHbRhMLAtiCQchG15hw93A+pH1w3vZ60/DLh99JD7NUEqE9qOiHnV5INZ+zFzNVkuR4S9xZovSp8MAkmEVlsD6sT7fhOxPi1VRSkBM/wD3iUA/iEY="forKey:@"sign"];

//然后這里就調用了第二條接口。返回結果如果成功了,就直接調用通知,跳轉到指定的界面。

[NetWorkingpostWithUrlString:zhifubao_Resultparameters:prccsuccess:^(iddata) {

NSLog(@"網絡請求成功");

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"成功了嗎!!!!!%@",dict);

if([dict[@"msg"]isEqualToString:@"1"]) {

//創建通知

NSNotification*notificationn =[NSNotificationnotificationWithName:@"tongzhinine"object:niluserInfo:dict];

//通過通知中心發送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificationn];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付結果"message:@"支付成功"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}else{

NSLog(@"支付結果上傳服務器失敗");

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付結果"message:@"支付失敗"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}

}failure:^(NSError*error) {

NSLog(@"網絡請求成功");

}];

}else{

//創建通知

NSNotification*notificati =[NSNotificationnotificationWithName:@"DefeatZhifubaonine"object:niluserInfo:nil];

//通過通知中心發送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificati];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付結果"message:@"支付失敗"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}

}];

//授權跳轉支付寶錢包進行支付,處理支付結果

[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"result = %@",resultDic);

//解析auth code

NSString*result = resultDic[@"result"];

NSString*authCode =nil;

if(result.length>0) {

NSArray*resultArr = [resultcomponentsSeparatedByString:@"&"];

for(NSString*subResultinresultArr) {

if(subResult.length>10&& [subResulthasPrefix:@"auth_code="]) {

authCode = [subResultsubstringFromIndex:10];

break;

}

}

}

NSLog(@"授權結果authCode = %@", authCode?:@"");

}];

}

//下面的這個是微信調用的方法!沒錯!微信就是這么一小句話就調用起來了!

return[WXApihandleOpenURL:urldelegate:self];

returnYES;

}

下面輪到微信支付了。微信比支付寶簡單的太多太多了。因為微信分享如果你是使用了Share SDK的話,那你做微信支付的時候,根本就不需要再集成什么SDK了,直接就用分享的那個SDK就OK了!

所以這里直接就上硬菜了!

和后臺商量之后,直接只需要一條接口就OK了

微信支付APP預支付申請,含加簽

調用接口(post)

www.baidu.com

請求參數

key (會員登錄令牌)

pay_sn 支付編號

subject 訂單主題描述信息

amount 訂單金額

返回數據

app 支付請求數據集合(包含sign)

微信只有一條接口,也是在微信支付按鈕的點擊方法那里寫

[NetWorkingpostWithUrlString:weixinzhifu_Signaparameters:prccsuccess:^(iddata) {

NSLog(@"網絡請求成功");

[HUDhideAnimated:YES];

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"微信加簽后返回的數據==%@",dict);

//NSLog(@"打斷之后的數據=%@",arr);

if([dict[@"msg"]isEqualToString:@"1"]) {

//調起微信支付

PayReq*request = [[PayReqalloc]init];

request.partnerId= dict[@"datas"][@"app"][@"partnerid"];

request.prepayId= dict[@"datas"][@"app"][@"prepayid"];

request.package=dict[@"datas"][@"app"][@"package"];

request.nonceStr= dict[@"datas"][@"app"][@"noncestr"];

request.timeStamp= [dict[@"datas"][@"app"][@"timestamp"]intValue];

//這里要注意key里的值一定要填對,微信官方給的參數名是錯誤的,不是第二個字母大寫

NSMutableDictionary*signParams = [NSMutableDictionarydictionary];

[signParamssetObject:@"wx5942cca2360ff745"forKey:@"appid"];

[signParamssetObject: dict[@"datas"][@"app"][@"partnerid"]forKey:@"partnerid"];

[signParamssetObject: request.nonceStrforKey:@"noncestr"];

[signParamssetObject: request.packageforKey:@"package"];

[signParamssetObject: dict[@"datas"][@"app"][@"timestamp"]forKey:@"timestamp"];

[signParamssetObject: request.prepayIdforKey:@"prepayid"];

//生成簽名

NSString*sign= dict[@"datas"][@"app"][@"sign"];

//添加簽名

request.sign= sign;

//調起微信開始支付!!

[WXApisendReq:request];

NSLog(@"這是微信的打印");

}

}failure:^(NSError*error) {

NSLog(@"網絡請求失敗");

[HUDhideAnimated:YES];

}];

因為微信的支付的方法都是一樣的,指的是9.0以前的9.0以后的都是那2個方法,而且微信只需要一句話,所以我這里我就不在寫那2個方法了。但是還有微信一個9.0以前的方法,雖然無用,但是也寫出來,顯得全面一點,可以忽略的。

//就是下面的這個方法了

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

{

NSLog(@"11111WQEQ");

return[WXApihandleOpenURL:urldelegate:self];

}

最后一步就是就是微信給我們返回的信息的接收方法

-(void) onResp:(BaseResp*)resp

{

NSString*strMsg = [NSStringstringWithFormat:@"errcode:%d", resp.errCode];

NSString*strTitle;

if([respisKindOfClass:[SendMessageToWXRespclass]])

{

strTitle =@"發送媒體消息結果";

}

if([respisKindOfClass:[PayRespclass]]){

//支付返回結果,實際支付結果需要去微信服務器端查詢

strTitle = [NSStringstringWithFormat:@"支付結果"];

switch(resp.errCode) {

caseWXSuccess:{

strMsg =@"恭喜您,支付成功!";

//[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"success"}];

NSLog(@"%@",strMsg);

break;

}

caseWXErrCodeUserCancel:{

strMsg =@"已取消支付!";

//[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];

NSLog(@"%@",strMsg);

break;

}

default:{

strMsg = [NSStringstringWithFormat:@"支付失敗!"];

//[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];

NSLog(@"%@",strMsg);

break;

}

}

//創建通知

NSNotification*notificationnn =[NSNotificationnotificationWithName:@"weixinbaotongzhi"object:niluserInfo:nil];

//通過通知中心發送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificationnn];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:strTitlemessage:strMsgdelegate:selfcancelButtonTitle:nilotherButtonTitles:@"確定",nil];

[alertshow];

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容

  • 自己總結的微信支付寶支付流程和注意點: 準備工作: 需要公司的營業執照,稅務信息,等老板的身份證信息等,我記得,用...
    Www劉閱讀 18,570評論 2 50
  • 最近實現了支付寶sdk導入的視線功能,那么現在就講一下實現的整個流程。(其實并沒有想象中那么難) 一:第一步 需要...
    辛小二閱讀 1,375評論 0 1
  • iOS支付 iOS支付分為兩類,第三方支付和應用內支付(內購)。 第三方支付包括:支付寶支付、微信支付、銀聯支付、...
    請輸入賬號名閱讀 6,231評論 3 22
  • 1,微信支付:微信支付其實還好,文檔比較清楚:1,請求預支付碼(服務器需要跟微信做好處理);2,發起支付;2,支付...
    WSKing的雜貨鋪閱讀 1,445評論 2 8
  • 開始嘗試一款據說已經很流行的“小游戲”——瘟疫公司。 這個游戲很像“生化危機”和“釜山行”的源頭,生物科技公司研制...
    茉莉大大閱讀 216評論 1 0