IOS APP端京东支付集成

京东支付没有现成的SDK, 使用的是加载html。因此,在集成京东支付的时候,我们使用webView来进行加载显示支付的页面。

京东支付需要传递多个参数才能拉起支付页面,那么我们怎么样获得和传递参数呢?

1.我们需要与自己的后台进行交互,通过网络请求,获取到拉起支付页面所需要的参数,并将参数解析成字符串进行保存。

2.在选择京东支付方式之后, 跳转到一个由Viewcontroller控制webView的场景下,将webView的delegate指向当前的ViewController。将获取到的参数,
通过网络请求传递给京东的后台进行验证,京东后台及html页面地址为 : https://m.jdpay.com/wepay/web/pay

在viewDidLoad方法中调用如下方法:

-(void)viewDidLoad {

//通过AFN向京东发送参数并进行验证,并获取支付的html路径

[selfloadTheJDRequest];

}

-(void)loadTheJDRequest {

ShowIndicatorWithMessage(@"正在跳转请稍后");

NSMutableDictionary *formDic = [[NSMutableDictionaryalloc]init];

[formDic
setObject:self.getDic[@"successCallbackUrl"]
? self.getDic[@"successCallbackUrl"] :@""forKey:@"successCallbackUrl"];

[formDic
setObject:self.getDic[@"tradeDescription"]
? self.getDic[@"tradeDescription"] :@""forKey:@"tradeDescription"];

[formDic
setObject:self.getDic[@"tradeTime"]
? self.getDic[@"tradeTime"] :@""forKey:@"tradeTime"];

[formDic
setObject:self.getDic[@"tradeNum"]
? self.getDic[@"tradeNum"] :@""forKey:@"tradeNum"];

[formDic
setObject:self.getDic[@"tradeName"]
? self.getDic[@"tradeName"] :@""forKey:@"tradeName"];

[formDic
setObject:self.getDic[@"merchantRemark"]
? self.getDic[@"merchantRemark"] :@""forKey:@"merchantRemark"];

[formDic
setObject:self.getDic[@"version"]
? self.getDic[@"version"] :@""forKey:@"version"];

[formDic
setObject:self.getDic[@"currency"]
? self.getDic[@"currency"] :@""forKey:@"currency"];

[formDic
setObject:self.getDic[@"merchantSign"]
? self.getDic[@"merchantSign"] :@""forKey:@"merchantSign"];

//获取本地保存的token值

NSString *JDToken = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"JDTOKEN"];

NSLog(@"-------------%@",JDToken);

[formDic setObject:JDToken ? JDToken :@""forKey:@"token"];

[formDic
setObject:self.getDic[@"tradeAmount"]
? self.getDic[@"tradeAmount"] :@""forKey:@"tradeAmount"];

[formDic
setObject:self.getDic[@"notifyUrl"]
? self.getDic[@"notifyUrl"] :@""forKey:@"notifyUrl"];

[formDic
setObject:self.getDic[@"merchantNum"]
? self.getDic[@"merchantNum"] :@""forKey:@"merchantNum"];

[formDic
setObject:self.getDic[@"failCallbackUrl"]
? self.getDic[@"failCallbackUrl"] :@""forKey:@"failCallbackUrl"];

//通过AFN提交参数

AFHTTPRequestOperationManager *manager=[AFHTTPRequestOperationManagermanager];

manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObjects:@"text/html",@"text/javascript",nil];

manager.responseSerializer=[AFHTTPResponseSerializerserializer];

[manager POST:self.getDic[@"jdReqUrl"]parameters:formDicsuccess:^(AFHTTPRequestOperation
*operation,id responseObject) {

NSString *htmlstring=[[NSStringalloc]initWithData:responseObjectencoding:NSUTF8StringEncoding];

//将第二次请求出来的html字符串加载到webview

[self.chargeWebViewloadHTMLString:htmlstringbaseURL:[NSURLURLWithString:self.getDic[@"jdReqUrl"]]];

} failure:^(AFHTTPRequestOperation *operation,NSError
*error) {

}];

}

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError
*)error {

ShowTips(@"数据加载出错啦!");

}

-(void)viewWillDisappear:(BOOL)animated {

[superviewWillDisappear:animated];

HideIndicator();

}

3.根据回调进行判断是否支付成功, 回调地址中包含token字段及其信息, 则表示支付成功,否则支付失败。   此处的token值获取到之后, 保存在本地, 在步骤2中向京东发送参数时, token不为空时,拉起的支付页面显示带有银行卡的界面, 若token为空时,
则显示京东的登录界面。

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest
*)request navigationType:(UIWebViewNavigationType)navigationType {

NSLog(@"============%@",request.URL);

if ([request.URL.absoluteStringrangeOfString:@"call_back_url"].location
!=NSNotFound) {

if ([request.URL.absoluteStringrangeOfString:@"token"].location
!=NSNotFound) {

NSLog(@"-------------充值成功");

NSString *token = [[request.URL.absoluteStringcomponentsSeparatedByString:@"token="]lastObject];

NSString *gettoken = [[tokencomponentsSeparatedByString:@"&"]firstObject];

NSLog(@"-------------%@",gettoken);

[[NSUserDefaultsstandardUserDefaults]setObject:gettoken
forKey:@"JDTOKEN"];

[[NSUserDefaultsstandardUserDefaults]synchronize];

[self.navigationControllerpopToViewController:self.navigationController.viewControllers[self.navigationController.viewControllers.count
- 3]
animated:YES];

} else {

NSLog(@"-------------充值失败");

UIAlertView *alt=[[UIAlertViewalloc]initWithTitle:@"支付失败"message:nildelegate:selfcancelButtonTitle:@"稍后尝试"otherButtonTitles:@"再次提交",nil];

alt.tag=1000;

[alt show];

}

}

returnYES;

}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

if (alertView.tag ==1000) {

if (buttonIndex == alertView.cancelButtonIndex) {

[self.navigationControllerpopToViewController:self.navigationController.viewControllers[self.navigationController.viewControllers.count
- 3]
animated:YES];

} else {

[selfloadTheJDRequest];

}

}

}

-(void)webViewDidFinishLoad:(UIWebView *)webView {

HideIndicator();

}

5.注意事项:

(1)京东支付,每天只有五次支付机会,支付五次之后,会提示一些京东默认的错误信息及带有错误信息的界面。

(2)首次与后台交互时,返回的token值必定为空,拉起之后进入登录界面, 当支付成功之后,才会有token的信息在京东的回调地址中,此时前端或者后端截取之后保存到本地即可下次直接之用

(3)回调地址中包含token才表示成功, 否则失败。

时间: 2024-08-05 19:28:52

IOS APP端京东支付集成的相关文章

iOS应用之微信支付集成-直接前端集成

所有信息的生成都在前端完成,包括对订单进行sign签名以及MD5签名加密(此方法相对来说有些复杂,没有官方给的方法简单).注:官方给的是v3&v4支付流程,签名和加密都是在服务器端进行,由于没有对接过,所以就暂时没有办法分享. 1. 准备工作 工程所需的微信支付SDK,如下图: 微信支付所需的相关用户信息(由用户申请) //微信支付商户号 #define MCH_ID @"YOUR_MCH_ID" //开户邮件中的(公众账号APPID或者应用APPID) #define WX_

PHP TP5框架-手机APP端支付宝支付

最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在蚂蚁金服开放平台创建应用,签约商户,生成应用公钥和私钥: 2.配置统一下单支付参数: 3.整合支付宝demo类文件: 4.创建Alipay支付类,类内创建两个方法(alipay_app:统一下单方法和alipay_notify:支付成功异步回调方法); 第一步主要是在蚂蚁金服开放平台登录你的支付

PHP APP端微信支付

前面已经写了手机APP支付宝支付,今天再把手机APP微信支付补上,前期的准备工作在这里就不多说了,可以参考微信支付开发文档,一定要仔细阅读开发文档,可以让你少踩点坑:准备工作完成后就是配置参数,调用统一下单接口,支付后异步回调三部曲啦: 1.我封装好的一个支付类文件,多余的东西都去除掉了,并且把配置参数放到了这个支付类中,只需要修改Weixinpayandroid方法内的几个参数就可以直接复制使用: class Wxpayandroid { //参数配置 public $config = arr

开源系统ThinkSNS V4移动APP端 10月--11月更新播报

社交系统ThinkSNS V4包含电脑web端.手机H5.Android APP端以及iOS APP端,从十月到目前十一月中旬,陆陆续续也更新了两三次,由于更新的内容不多,所以没有单独发更新播报.同时,我们ThinkSNS V4与TS+并行,持续更新,两套系统并行,大家请根据自己的需要选择. ThinkSNS iOS V4.6.4.3更新内容 1.修复:认证信息本地化不完善 2.修复:发布动态 -- 手动输入@XXX 会导致文字变小 3.修复:iOS11系统下有一定概率保存照片闪退 4.优化:账

iOS app集成支付宝支付流程及后台php订单签名处理

iOS app集成支付宝支付流程 1: 开通支付宝商户 由公司去支付宝 https://b.alipay.com/order/serviceIndex.htm 签约支付宝开通支付宝商家: 2:商户支付宝开通无线支付功能 开通商户支付宝之后,虽然可以获取到应用使用的 key和id,如果如果不开通无线支付功能的话,会在app集成的时间 提示商户未开通无线支付功能的错误: 开通商户支付宝-无线支付功能,请在商户支付宝后台,按要求提供审核材料开通: 3:在商户支付宝后台下载SDK 在商户支付宝后台,即可

iOS开发支付集成之微信支付

这一篇是<iOS开发之支付>这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付.在集成的时候建议都要去下载最新版的SDK,因为我知道的前不久支付宝,银联都更新了一次,微信的不太清楚更新了没. 在被支付宝.银联坑过之后,发现其实微信支付的集成并没有想象中的那么困难,像支付宝那样简单地调用个方法就行,重要的难的部分都是后台来做的.微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 集成前首先要看看文档,开发

iOS第三方支付集成——微信支付

近期笔者开发的项目中,需要用到支付宝支付和微信支付.大概一个月前,支付宝就已经集成完毕并可以正常使用.但在集成坑爹的微信支付SDK时,遇到了诸多问题,搞了将近三个星期.期间不断的跟后台同事核对代码(签名.下单),支付流程,其中的血泪艰辛,不言而喻.现笔者把集成过程中遇到的一些问题记录下来,供自己和大家参考.如果有什么不对的地方,也请大家多多指正: 吐槽完了,下面出正文. 补充说明:第一准备阶段不需要开发者负责操作,如果你是iOS开发人员,只想找到调用微信支付的代码,可直接跳过 第一准备阶段. 一

简聊iOS支付集成(支付宝和微信支付)

一.支付集成是什么 1.现在大部分app都有快捷支付功能,支付集成将第三方支付平台集成到自己的项目中,能够完成自己项目中的支付功能, 二.支付集成的使用 <1>.支付宝: 下载SDK和Demo:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1 配置相关信息: 1.导入SDK: AlipaySDK.bundle AlipaySDK.framework 2.配置静态库:在

Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. wap银联支付流程是这样:客户端---> 服务器(构建支付请求)--> 银联支付 ---> 返回到服务端(处理支付结果).所以对于手机网站银联支付没有问题,但是对于ios端app和android端app, 再通过wap支付,发现支付成功后,很难在回到app客户端了. 所以这里就必须借助Pho