京东支付没有现成的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:gettokenforKey:@"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才表示成功, 否则失败。

Demo下载地址: http://download.csdn.net/detail/svendson/9512589

IOS APP端京东支付集成相关推荐

  1. 苹果手机 微信PHP问题,安卓、ios APP调用微信支付时,页面出现空白 。(php微信支付,app发起微信支付白屏)?...

    安卓.ios APP调用微信支付时,页面出现空白 我的后端是用php开发的.我是先调用微信的统一下单生成,生成prepay_id预支付订单号,代码如下: public function send_pa ...

  2. 微信境外支付php_PHP实现 APP端微信支付功能

    前面已经写了手机APP支付宝支付,今天再把手机APP微信支付补上,前期的准备工作在这里就不多说了,可以参考微信支付开发文档,一定要仔细阅读开发文档,可以让你少踩点坑:准备工作完成后就是配置参数,调用统 ...

  3. php微信app支付教程,PHP APP端微信支付的方法

    这篇文章主要介绍了关于PHP APP端微信支付的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前面已经写了手机APP支付宝支付,今天再把手机APP微信支付补上,前期的准备工作在这 ...

  4. 用PHP开发APP端微信支付

    用PHP开发APP端微信支付的一点个人心得 最近因为公司需求,要开发APP端上的微信支付,看了微信文档,感觉还不错,没有遇到太大的坑,需要注意的点不算太多. 写一个记事文档,作为备忘录. APP支付流 ...

  5. app端微信支付(二) - 生成预付单

    ​前一篇文章的时序图中说了,app端调用微信支付必须先由后台调用微信后台生成预付单,再构建参数给手机端,而数据的构建要以xml形式,那么看看代码具体实现吧,代码已经精简过了,自己的业务已经除去,精简的 ...

  6. iOS应用之微信支付集成

    1. 准备工作 工程所需的微信支付SDK,如下图: 导入工程的SDK文件 微信支付所需的相关用户信息(由用户申请) //微信支付商户号#define MCH_ID @"YOUR_MCH_ID ...

  7. 京东支付集成遇到的问题记录

    集成京东支付时遇到的问题在此记录,望小伙伴不再进坑 步骤一: 在module_base_ui的build.gradle中android代码块里添加 sourceSets { main { jniLib ...

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

    所有信息的生成都在前端完成,包括对订单进行sign签名以及MD5签名加密(此方法相对来说有些复杂,没有官方给的方法简单). 注:官方给的是v3&v4支付流程,签名和加密都是在服务器端进行,由于 ...

  9. PHP APP端支付宝支付

    应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在 ...

最新文章

  1. 简单的文本框输入实时计数
  2. RHlinux下安装VORACLE VM VIRTUAL BOX
  3. 谈谈机器学习的基本问题,不谈数学!
  4. 高压放电与防静电塑料包装
  5. eclipse php 环境及调试配置
  6. 鸿蒙硬件HI3861-I2C-MCP23017
  7. SQL Server 2014新特性:其他
  8. TOGAF9.2第I部分 第2章核心概念
  9. Mixly 二次开发 自定义库 OLED
  10. C语言克莱姆法解方程组解析,解线性方程组用克莱姆法则
  11. 机械制造技术类毕业论文文献都有哪些?
  12. No implementation found for void java接口不能跳转到实现类
  13. 快手Java开发二面面经分享
  14. Android开发范例实战宝典
  15. 审查指南关于计算机可读介质,中美专利申请中对“计算机可读介质”的可专利性差异...
  16. 服务器Redis实例中挖矿病毒排查及处理
  17. surface 通过U盘 镜像恢复系统
  18. qt中ui的 使用介绍
  19. 点分治动态点分治小结
  20. tryhackme-Bolt

热门文章

  1. 木瓜移动出海助力超10000家企业打开全球市场
  2. 分享99个ASP影音娱乐源码,总有一款适合您
  3. 删掉带页眉的空白页结果把所有页眉都删掉解决办法
  4. el-table实现热度表
  5. PROFINET与以太网之间的关系?
  6. “好奇号”的生命观(The View for life)
  7. Flask框架——蓝图
  8. word中的高级查找替换
  9. 2021云栖大会丨大咖都讲了啥?
  10. 【动态ppt制作软件】Focusky教程 | 设置预加载信息