《IOS 9 支付宝 and 微信支付的集成》
支付做好了,只要7行代码,就可进行支付。不需要设置其他东西:举个例子:微信加什么.mm 和设置 other lInk 什么的。只要配置一个文件就可以。避免了,进行支付参数这个错,那个错的。造成支付调不起支付等原因。还有支付宝,打破它的限制,想把它移动到那个文件夹,九移动到哪(不会出现错误 ,不是什么绝对路径哦(嘿嘿,这是改里面的文件了))、。
第一步:我们来看效果。
第二部:我们配置文件。
1、导入必要的框架。
2、添加 URLtype (用于回调)。
3、添加,白名单。
4、进行网络的配置。(看图片上的说明)
第三步:进行关键包的导入。
绿色的是,重要的配置文件(一级保护动物)。
第四步:关键代码的缩影。
1、支付宝。
1》调用代码。
ZSJ_All_PaySDK * pa = [ZSJ_All_PaySDK ZSJ_PaySdk];
if ([pa ZSJExamine]) {
pa.P_amount = @"0.01";
pa.P_productDescription = @"erdan ";
pa.P_productName = @"sd";
pa.P_tradeNO = @"KPD20160108104062";
[pa ZSJ_Pay:^(id resultObject) {
NSLog(@"%@",resultObject);
}];
}
2》隐式代码。
-(void)ZSJ_Pay:(result)resultObject{
Order *order = [[Order alloc] init];
order.partner = Alipay_publickey;
order.seller = Alipay_seller;
order.tradeNO = self.P_tradeNO; //订单ID(由商家自行制定)
order.productName = self.P_productName; //商品标题
order.productDescription = self.P_productDescription; //商品描述
order.amount = self.P_amount; //商品价格
order.notifyURL = Alipay_notifyURL; //回调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 = Alipay_scheme;
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(Alipay_privatekey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
// 支付结果的回调
resultObject(resultDic);
}];
}
}
2、微信。
1》调用代码。
ZSJ_All_PaySDK * pa = [ZSJ_All_PaySDK ZSJ_WXPaySdk];
if ([pa ZSJExamine_WeChat]) {
pa.WeChat_amount = @"1";
pa.WeChat_productDescription = @"你欠我钱";
pa.WeChat_productName = @"钱";
pa.WeChat_tradeNO = @"KPD20160108104025";
[pa WeChat_SendPay];
}
2》 隐式代码。
//提交预支付
-(NSString *)sendPrepay:(NSMutableDictionary *)prePayParams
{
NSString *prepayid = nil;
//获取提交支付
NSString *send = [self genPackage:prePayParams];
//输出Debug Info
[debugInfo appendFormat:@"发送的xml:%@\n", send];
//发送请求post xml数据
NSData *res = [WXEncrypt httpSend:@"https://api.mch.weixin.qq.com/pay/unifiedorder" method:@"POST" data:send];
//输出Debug Info
[debugInfo appendFormat:@"服务器返回:\n%@\n\n",[[NSString alloc] initWithData:res encoding:NSUTF8StringEncoding]];
WApiXML *xml = [[WApiXML alloc]init];
//开始解析
[xml StartAnalysisData:res];
// 获取数据
NSMutableDictionary *resParams = [xml GetAnalysisData];
NSLog(@"关键时刻:%@",resParams);
//判断返回
NSString *return_code = [resParams objectForKey:@"return_code"];
NSString *result_code = [resParams objectForKey:@"result_code"];
if ( [return_code isEqualToString:@"SUCCESS"] )
{
//生成返回数据的签名
NSString *sign = [self createMd5Sign:resParams ];
NSString *send_sign =[resParams objectForKey:@"sign"] ;
//验证签名正确性
if( [sign isEqualToString:send_sign]){
if( [result_code isEqualToString:@"SUCCESS"]) {
//验证业务处理状态
prepayid = [resParams objectForKey:@"prepay_id"];
return_code = 0;
[debugInfo appendFormat:@"获取预支付交易标示成功!\n"];
}
}else{
last_errcode = 1;
[debugInfo appendFormat:@"gen_sign=%@\n _sign=%@\n",sign,send_sign];
[debugInfo appendFormat:@"服务器返回签名验证错误!!!\n"];
}
}else{
last_errcode = 2;
[debugInfo appendFormat:@"接口返回错误!!!\n"];
}
return prepayid;
}