《IOS 9 支付宝 and 微信 支付的集成》
2016-01-11 15:34
831 查看
《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;
}
第五部:完整代码下载。
https://github.com/zhoushuangjian/ZSJ_PaySDK.git
支付做好了,只要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;
}
第五部:完整代码下载。
https://github.com/zhoushuangjian/ZSJ_PaySDK.git
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 突击部队拼多多
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 「Linux 中国」2018 微信文章排行榜
- 微信服务号推送模板消息接口
- PHP限制页面只能在微信自带浏览器访问的代码
- HTML5实现微信拍摄上传照片功能
- 微信小程序去哪里找 小程序到底如何使用(附小程序名单)
- 使用jQuery.wechat构建微信WEB应用
- nw.js实现类似微信的聊天软件
- jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
- JS版微信6.0分享接口用法分析
- 大家在抢红包,程序员在研究红包算法