支付-支付宝

前言

支付宝支付是很常见的支付方式,下面这篇就是亲测有用的文章,纯手打,会持续更新。


 卖家跟支付宝签约

  (需要实名认证这个支付宝账号,需要提供企业资料,成为企业支付宝账号,一般为公司的支付宝账号)

第一步:登陆支付宝官方网站(支付宝商家中心)。

      这是没有签约的账户效果

      以下是申请好了的效果图,(申请好套餐后正常2-5天会有申请状态,成功后进入【我的商家服务】)

第二步:点击导航栏中“商家服务”,找到“合作身份(Partner ID)查询”与“安全校验码(key)查询”。

     合作者身份ID(partner)和交易安全校验码(key)是商户与支付宝签约后,商户获得的支付宝商户唯一识别码与密钥。当商户把支付宝功能接入商户网站时会用到它们,以便让支付宝认证商户。 即可查询到合作者身份ID,以2088开头的16位纯数字。

生成公钥和私钥,并上传公钥里的字符串

   怎么上传公钥呢?输入支付宝密码,跳转到查看交易安全校验码(key)页面,在那个页面设置下,打开公钥把公钥里面的字符串粘到指定位置并上传即可,公钥必须给支付宝,不然他们解密不了。打开终端,生成共私钥:

   私钥:OpenSSL genrsa -out rsa_private_key.pem 1024    公钥:OpenSSL rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem   编码后:openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem

代码里需要使用 编码后的私钥进行加密,注意是编码后的。

    (上传公钥)

    (RSA秘钥)

  项目集成支付宝SDK

  下载支付宝SDK,把支付宝相关的SDK和依赖的系统库资源文件导入到本地工程项目中。

 #define gxPartner      @"2088*******"  商家的PID #define gxSeller      @"2000000000@qq.com"    收钱的支付宝账号 #define gxPrivateKey                                            //商户方的私钥,pkcs8 格式。    @"MIICeAIBADANBgkqdasdasdasdasdasdoGBAM09Ym+y5Tzw/xVIdQ6xCZnpqh7ZUr-------"  +(void)PayMoney :(NSDictionary *)dataDic;{     /*    *生成订单信息及签名    */    //将商品信息赋予AlixPayOrder的成员变量     Order *order = [[Order alloc] init];     order.partner = gxPartner;    //支付宝账号  order.seller = gxSeller;     //订单ID不能两次一样,否则第二次无法支付。 order.tradeNO = [dataDic objectForKey:@"fid"]; //订单ID(由商家自行制定)     order.orderNumber =[dataDic objectForKey:@"orderNumber"]; //订单号     order.productDescription = @"呵呵"; //商品描述     order.amount = [dataDic objectForKey:@"fpayMoney"]; //商品价格     order.notifyURL =  @"http://www.xxx.com"; //回调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`该字符串是你自定义的 URL scheme 的名字。建议采用反转域名的方法保证该名字的唯一性`    NSString *appScheme = @"Mall";    >  //将商品信息拼接成字符串  NSString *orderSpec = [order description];  DMLog(@"orderSpec = %@",orderSpec);      >  //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode    idsigner = CreateRSADataSigner(gxPrivateKey); 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) { DMLog(@"reslut = %@",resultDic); if ([[resultDic objectForKey:@"resultStatus"]isEqualToString:@"9000"]) { //支付成功了 }

}];}}

resultStatus,状态码,SDK里没对应信息,第一个文档里有提到:支付成功后,后台的订单状态已经改变了,此时可以通知页面刷新,以后台的数据状态为准,更新前端页面中订单的支付状态。

9000 订单支付成功 8000 正在处理中 4000 订单支付失败 6001 用户中途取消 6002 网络连接出错

memo, 提示信息,比如状态码为6001时,memo就是“用户中途取消”。但千万别完全依赖这个信息,如果未安装支付宝app,采用网页支付时,取消时状态码是6001,但这个memo是空的。。(当我发现这个问题的时候,我就决定,对于这么不靠谱的SDK,还是尽量靠自己吧。。)

result,订单信息,以及签名验证信息。如果你不想做签名验证,那这个字段可以忽略了。。

集成支付宝iOS

*****************************更新 **************************

iOS9上面不能跳转到支付宝客户端支付 什么情况只能跳到网页

(一)为了适配 iOS9.0 中的 App Transport Security(ATS)对 http 的限制,这里需要对 支付宝的请求地址 alipay.com 做例外,在 app 对应的 info.list 中添加如下配置 (文中以 XML 格式描述)。 解决方法 (二) 同时需要在Plist中设置支付宝为白名单 解决方法

支付结果不回调

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation { if([url.hostisEqualToString:@"safepay"]) { //跳转支付宝钱包进行支付,处理支付结果 [[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) { NSLog(@"result = %@",resultDic); }]; } returnYES; } // NOTE: 9.0以后使用新API接口 - (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options { if([url.hostisEqualToString:@"safepay"]) { //跳转支付宝钱包进行支付,处理支付结果 [[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) { NSLog(@"result = %@",resultDic); }]; } returnYES; }

你会发现 callback:^(NSDictionary *resultDic)  没有结果返回了,查了官网后发现,需要在APPDelegate里手动获取下返回结果,保持原支付代码不变的情况下,复制上面的代码粘贴到 APPDelegate里,支付密代码那里的回调callback里就会有内容返回了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

3步以内利用中间人MitM攻击从RDP连接中获得密码

今天和大家分享个小技术,简单几步通过执行MitM攻击同时从RDP连接中提取明文凭据。我这里使用的测试环境是Linux(1台)、Windows(2台),此环境仅供...

1613
来自专栏梧雨北辰的开发录

ReactiveCocoa函数响应式编程-应用篇目录:一、RAC中常用的类4.RACCommand:用于处理事件的类二、RAC常用的宏定义三、RAC中关于信号的常用操作四、RAC常用的处理事件响应的方

使用RAC其实就是一个创建信号订阅信号的过程。上篇ReactiveCocoa函数响应式编程-基础篇,主要简单介绍了RAC的信号机制,本篇则以信号为核心,就信号常...

4366
来自专栏腾讯云安全的专栏

刚需 |Wannacry 勒索蠕虫病毒用户修复指引

1955
来自专栏腾讯电脑管家的专栏

Petya 勒索软件新变种详细分析报告

据 twitter 爆料,乌克兰政府机构遭大规模攻击,其中乌克兰副总理的电脑均遭受攻击,目前腾讯电脑管家已经确认该病毒为 Petya 勒索病毒变种。

1940
来自专栏Scott_Mr 个人专栏

ReactiveCocoa(一)

983
来自专栏ytkah

微信公众号后台编辑器出现短暂故障 附找回素材的方法

  今天下午(大致为8月15日13:30-14:40),微信公众平台后台编辑器出现短暂故障,保存素材后会出现被清空的现象,15:30左右已全面修复。   对于因...

3796
来自专栏FreeBuf

暗云Ⅲ BootKit 木马分析

概况 “暗云”系列木马自2015年初被腾讯反病毒实验室首次捕获并查杀,至今已有2年多。在这两年多时间里,该木马不断更新迭代,持续对抗升级。 从今年4月开始,该木...

5697
来自专栏FreeBuf

揭秘银行木马Chthonic:网银大盗ZeuS的最新变种

说到Zeus/Zbot,做安全多多少少都会有所了解。Zeus是对金融系统威胁最大的僵尸网络之一,控制者借助僵尸程序窃取账户登录信息和信用卡号码。Zbot往往通过...

1757
来自专栏Scott_Mr 个人专栏

ReactiveCocoa(一)

3436
来自专栏安恒信息

Bad Rabbit(坏兔子)勒索病毒预警

1. 勒索病毒基本信息 2017年10月24日,网上出现了一个新的勒索病毒Bad Rabbit(坏兔子),最早在俄罗斯和乌克兰出现,跟之前的NotPetya勒索...

3457

扫码关注云+社区