1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 三方支付 微信支付 支付宝支付 银联支付 分享

三方支付 微信支付 支付宝支付 银联支付 分享

时间:2020-02-22 23:09:02

相关推荐

三方支付 微信支付 支付宝支付 银联支付  分享

三方支付:微信支付 支付支付 银联支付

对于 还行 一些 配置 看下 官方 文档 :

在 APPDelegate.m 配置

#import <AlipaySDK/AlipaySDK.h>

#import "WechatAuthSDK.h"

#import "WXApiObject.h"

#import "WXApi.h"

#import "WXApiManager.h"

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

NSLog(@"url %@", url);

// url qipeipu://safepay/?%7B%22memo%22:%7B%22memo%22:%22%E7%94%A8%E6%88%B7%E4%B8%AD%E9%80%94%E5%8F%96%E6%B6%88%22,%22ResultStatus%22:%226001%22,%22result%22:%22%22%7D,%22requestType%22:%22safepay%22%7D

// 支付宝支付 增加 的 信息

//如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包

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

[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】

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

}];

}

if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode

[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {

//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】

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

}];

}

// 银联支付 增加 的信息

[WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

return YES;

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// 增加 注册微信支付

[WXApi registerApp:WXAPPID withDescription:@"demo 2.0"];

return YES;

}

// 增加 回调 app 的 方法

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

return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

}

在调用的文件.m中增加

#import "UPPayPlugin.h"

#import <AlipaySDK/AlipaySDK.h>

#import "WXApi.h"

增加 UPPayPluginDelegate

// 支付宝支付

- (void)OrderBtnDidClick

{

[SVProgressHUD showWithStatus:@"正在跳转到支付宝..."];

[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeClear];

NSString *url = [NSString stringWithFormat:@"%@/bs/ordermain/pay/1", UrlData];

//设置请求体

NSString *orderId = [NSString stringWithFormat:@"%@", OrderIDStr];

NSString *useBalance = [NSString stringWithFormat:@"%i", Flag];

NSString *param=[NSString stringWithFormat:@"orderId=%@&useBalance=%@", orderId, useBalance];

// 请求 后台服务器 支付宝支付的接口 数据

[YCAllHttpTool orderPayWithUrl:url Param:param success:^(YCOrderPay *result){

NSString *appScheme = @"qipeipu";

// 标准来说 传参的 payOrder 也是需要 我们自己 拼接成 支付宝 后台需要的类型 的字符串

// 而 我公司正在后台帮我们做好了 拼接 需要的 类型 的字符串 所以只需要传参 后台服务器

// 返回的 payInfo 的字符串给 支付宝调用方法

// 标准的拼接类型 看官方文档 有拼接类型 看 后面的微信支付也差不多的

//后台返回的格式化的NSString的类型 订单信息

NSString *orderString = result.data.payInfo;

NSLog(@"++++++++++%@&&&&&&&&&&&&&", orderString);

if (orderString) {

[SVProgressHUD showSuccessWithStatus:@"正在打开支付宝支付"];

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

NSLog(@"%@", resultDic);

self.payResultDict = resultDic;

// self.payResult

self.payResult = [PayResult objectWithKeyValues:resultDic];

self.payResult.channel = 1;

// self.payResultData = [PayResultData objectWithKeyValues:resultDic[@"result"]];

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

NSDictionary *dict = resultDic[@"result"];

self.Dict = dict;

NSLog(@"%@ , %@", self.payResultData, dict);

// 9000 订单支付成功

// 8000 正在处理中

// 4000 订单支付失败

// 6001 用户中途取消

// 6002 网络连接出错

NSDictionary *dictEvent = @{@"payResult":self.payResult};

if ([self.payResult.resultStatus isEqualToString:@"9000"])

{

NSLog(@"支付完成");

// post2我公司要求将支付信息返回服务器 你需要调用

// [self post2];

// 我增加的 友盟统计 自定义事件 你也不需要调用

[MobClick event:@"alipay_success_event"];

// 下面为 支付成功 跳转到的 支付成功页面的控制器

YCBalancePayController *balanceVc = [YCBalancePayController balance];

[self.navigationController pushViewController:balanceVc animated:NO];

}else if([self.payResult.resultStatus isEqualToString:@"8000"]){

[SVProgressHUD showErrorWithStatus:@"正在处理中"];

// 我调用 友盟统计 自定义事件 你需要调用

[MobClick event:@"alipay_failed_event" attributes:dictEvent];

}else if([self.payResult.resultStatus isEqualToString:@"4000"]){

[SVProgressHUD showErrorWithStatus:@"订单支付失败"];

[MobClick event:@"alipay_failed_event" attributes:dictEvent];

}else if([self.payResult.resultStatus isEqualToString:@"6001"]){

[SVProgressHUD showErrorWithStatus:@"用户中途取消"];

[MobClick event:@"alipay_cancel_event" attributes:dictEvent];

}else{

[SVProgressHUD showErrorWithStatus:@"网络连接出错"];

[MobClick event:@"alipay_failed_event" attributes:dictEvent];

}

}];

}

else{

NSLog(@"支付宝支付失败 没有获得正确的payInfo, %@", result.msg);

NSDictionary *dicEvent = @{@"result":result.msg};

[MobClick event:@"alipay_failed_event" attributes:dicEvent];

NSString *str = [NSString stringWithFormat: @"支付宝支付失败,订单有误或已支付"];

[SVProgressHUD showErrorWithStatus:str];

}

} failure:^(NSError *error){

NSLog(@"支付宝支付失败 %@ ", error);

NSDictionary *dicEvent = @{@"error":error};

[MobClick event:@"alipay_failed_event" attributes:dicEvent];

NSString *str = [NSString stringWithFormat:@"支付宝链接失败,请稍后再试"];

[SVProgressHUD showErrorWithStatus:str];

}];

}

// 银联支付

- (void)OrderCardBtnDidClick

{

[SVProgressHUD showWithStatus:@"正在跳转到银联支付"];

[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeClear];

NSString *url = [NSString stringWithFormat:@"%@/bs/ordermain/pay/0", UrlData];

//设置请求体

NSString *orderId = [NSString stringWithFormat:@"%@", OrderIDStr];

NSString *useBalance = [NSString stringWithFormat:@"%i", Flag];

NSString *param=[NSString stringWithFormat:@"orderId=%@&useBalance=%@", orderId, useBalance];

// 请求 后台服务器 银联支付的接口 数据

[YCAllHttpTool orderCardPayWithUrl:url Param:param success:^(OrderCardPayInfo *result){

//后台返回的格式化的NSString的类型 订单信息

NSString *orderString = result.data.payInfo;

NSLog(@"orderString=%@",orderString);

if (orderString) {

[SVProgressHUD showSuccessWithStatus:@"正在打开银联支付"];

// 打开银联支付

[UPPayPlugin startPay:orderString mode:@"00" viewController:self delegate:self];

}else

{

NSLog(@"银联支付失败 没有获得正确的payInfo, %@", result.msg);

NSDictionary *dicEvent = @{@"result":result.msg};

[MobClick event:@"cardpay_failed_event" attributes:dicEvent];

NSString *str = [NSString stringWithFormat:@"银联支付失败, 订单号有误或已支付"];

[SVProgressHUD showErrorWithStatus:str];

}

} failure:^(NSError *error){

NSLog(@"银联支付失败--%@", error);

NSDictionary *dicEvent = @{@"error":error};

[MobClick event:@"cardpay_failed_event" attributes:dicEvent];

NSString *str = [NSString stringWithFormat:@"银联链接失败,请稍后再试"];

[SVProgressHUD showErrorWithStatus:str];

}];

}

// 为银联回调方法 UPPayPluginDelegate的方法

-(void)UPPayPluginResult:(NSString *)result

{

NSDictionary *dicEvent = @{@"result":result};

// success、fail、cancel,分别代表:支付成功、支付失败、用户取消支付

if([result isEqualToString:@"cancel"]){

[SVProgressHUD showErrorWithStatus:@"用户取消支付"];

[MobClick event:@"cardpay_cancel_event" attributes:dicEvent];

// return;

}

else if([result isEqualToString:@"success"]){

NSLog(@"银联支付成功result:%@", result);

[MobClick event:@"cardpay_success_event"];

YCBalancePayController *balanceVc = [YCBalancePayController balance];

[self.navigationController pushViewController:balanceVc animated:NO];

}

else //([result isEqualToString:@"fail"])

{

[MobClick event:@"cardpay_failed_event" attributes:dicEvent];

[SVProgressHUD showErrorWithStatus:@"银联支付失败"];

}

}

// 微信支付

// 微信支付的回调 在 WXApiMangager.m中的 onResp: 方法

- (void)WXOrderBtnDidClick

{

[SVProgressHUD showWithStatus:@"正在跳转到微信支付..."];

[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeClear];

NSString *url = [NSString stringWithFormat:@"%@/bs/ordermain/pay/12", UrlData];

//设置请求体

// NSString *orderId = @"152684";

// NSString *useBalance = @"0";

NSString *orderId = [NSString stringWithFormat:@"%@", OrderIDStr];

NSString *useBalance = [NSString stringWithFormat:@"%i", Flag];

NSString *param=[NSString stringWithFormat:@"orderId=%@&useBalance=%@", orderId, useBalance];

// 请求 后台服务器 微信支付的接口 数据

[YCAllHttpTool wxPayWithUrl:url Param:param success:^(WXPaySDK *result) {

if (![result.state isEqualToString:@"0"]) {

NSMutableDictionary *dicEvent = [NSMutableDictionary dictionary];

if (result.data) {

dicEvent = @{@"result":result.data};

}

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

NSString *str = [NSString stringWithFormat:@"订单已支付或订单不存在"];

[SVProgressHUD showErrorWithStatus:str];

return;

}

PacketMap *orderString = result.data.packetMap;

// 这就是 PayReq 就是 微信支付 需要的 类型 参数

PayReq *request = [[PayReq alloc] init];

request.partnerId = orderString.partnerid;

request.prepayId= orderString.prepayid;

request.package = orderString.package;

request.nonceStr= orderString.noncestr;

request.timeStamp= orderString.timestamp;

request.sign= orderString.sign;

// 微信支付传递 是 就是 该 PayReq 参数

// 微信支付的回调 在 WXApiMangager.m中的 onResp: 方法

[WXApi sendReq:request];

[SVProgressHUD dismiss];

} failure:^(NSError *error) {

NSLog(@"微信链接失败,请稍后再试 %@ ", error);

NSDictionary *dicEvent = @{@"error":error};

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

NSString *str = [NSString stringWithFormat:@"微信链接失败,请稍后再试"];

[SVProgressHUD showErrorWithStatus:str];

}];

}

// 微信支付的回调 在 WXApiMangager.m中的 onResp: 方法

// WXApiMangager.m

// 该方法中 我修改了 很多弹框提示 等

// 我修改了 什么 你看官方的 WXApiMangager.m中的 onResp: 比较下 就知道了

- (void)onResp:(BaseResp *)resp {

if ([resp isKindOfClass:[SendMessageToWXResp class]]) {

if (_delegate

&& [_delegate respondsToSelector:@selector(managerDidRecvMessageResponse:)]) {

SendMessageToWXResp *messageResp = (SendMessageToWXResp *)resp;

[_delegate managerDidRecvMessageResponse:messageResp];

}

} else if ([resp isKindOfClass:[SendAuthResp class]]) {

if (_delegate

&& [_delegate respondsToSelector:@selector(managerDidRecvAuthResponse:)]) {

SendAuthResp *authResp = (SendAuthResp *)resp;

[_delegate managerDidRecvAuthResponse:authResp];

}

} else if ([resp isKindOfClass:[AddCardToWXCardPackageResp class]]) {

if (_delegate

&& [_delegate respondsToSelector:@selector(managerDidRecvAddCardResponse:)]) {

AddCardToWXCardPackageResp *addCardResp = (AddCardToWXCardPackageResp *)resp;

[_delegate managerDidRecvAddCardResponse:addCardResp];

}

}else if([resp isKindOfClass:[PayResp class]]){

//支付返回结果,实际支付结果需要去微信服务器端查询

NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付结果"];

NSMutableDictionary *dicEvent = [NSMutableDictionary dictionary];

if(resp.errStr){

dicEvent = @{@"errMsg":resp.errStr};

}

// NSDictionary *dicEvent = @{@"errMsg":resp.errStr};

// 下面的这种写 字典的话 会发生崩溃现象

// NSDictionary *dicEvent = @{@"errMsg":resp.errStr};

// 当然这样写也是不行的,因为 该字典类型 为 某一类型 不能字符串 类型吧

// NSString *strEvent = resp.errStr;

// NSDictionary *dicEvent = @{@"errMsg":strEvent};

switch (resp.errCode) {

// WXSuccess= 0, /**< 成功 */

// WXErrCodeCommon = -1, /**< 普通错误类型 */

// WXErrCodeUserCancel = -2, /**< 用户点击取消并返回 */

// WXErrCodeSentFail = -3, /**< 发送失败 */

// WXErrCodeAuthDeny = -4, /**< 授权失败 */

// WXErrCodeUnsupport = -5, /**< 微信不支持 */

case WXSuccess:

strMsg = @"微信支付成功!";

NSLog(@"微信支付成功-PaySuccess,retcode = %d", resp.errCode);

// [SVProgressHUD showSuccessWithStatus:strMsg];

[[NSNotificationCenter defaultCenter] postNotificationName:@"backSuccess" object:self];

[MobClick event:@"wxpay_success_event"];

break;

case WXErrCodeUserCancel:

strMsg = @"微信支付被取消";

NSLog(@"微信支付被取消-PayCancel,retcode = %d", resp.errCode);

[SVProgressHUD showErrorWithStatus:strMsg];

[MobClick event:@"wxpay_cancel_event" attributes:dicEvent];

// [[NSNotificationCenter defaultCenter] postNotificationName:@"backSuccess" object:self];

break;

case WXErrCodeCommon:

strMsg = @"微信支付失败,请重新再试";

NSLog(@"微信支付失败-PayCommon,retcode = %d", resp.errCode);

[SVProgressHUD showErrorWithStatus:strMsg];

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

// [[NSNotificationCenter defaultCenter] postNotificationName:@"backSuccess" object:self];

break;

case WXErrCodeSentFail:

strMsg = @"微信支付发送失败";

NSLog(@"微信支付发送-PaySentFail,retcode = %d", resp.errCode);

[SVProgressHUD showErrorWithStatus:strMsg];

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

// [[NSNotificationCenter defaultCenter] postNotificationName:@"backSuccess" object:self];

break;

case WXErrCodeAuthDeny:

strMsg = @"微信支付授权失败";

NSLog(@"微信支付授权失败-PayAuthDeny,retcode = %d", resp.errCode);

[SVProgressHUD showErrorWithStatus:strMsg];

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

// [[NSNotificationCenter defaultCenter] postNotificationName:@"backSuccess" object:self];

break;

case WXErrCodeUnsupport:

strMsg = @"微信支付不支持";

NSLog(@"微信支付不支持-PayUnsupport,retcode = %d", resp.errCode);

[SVProgressHUD showErrorWithStatus:strMsg];

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

// [[NSNotificationCenter defaultCenter] postNotificationName:@"backSuccess" object:self];

break;

default:

strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];

[SVProgressHUD showErrorWithStatus:strMsg];

NSLog(@"微信支付错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);

[MobClick event:@"wxpay_failed_event" attributes:dicEvent];

break;

}

// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

// [alert show];

// [alert release];

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。