支付-支付宝

前言

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


 卖家跟支付宝签约

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

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

      这是没有签约的账户效果

      以下是申请好了的效果图,(申请好套餐后正常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 条评论
登录 后参与评论

相关文章

  • 支付系列:支付宝支付流程详解

    随着电商项目越来越火,随之而来的像支付宝,微信等第三方支付也非常的火爆,所以这里简单的说一下支付宝的支付流程。

    乱敲代码
  • java实现沙箱测试环境支付宝支付和整合微信支付和支付宝支付到ssm(附源码)

    下载地址:https://docs.open.alipay.com/270/106291/

    好好学java
  • 微信支付和支付宝支付到springmvc+spring+mybatis环境全过程(支付宝和微信支付)

    好好学java
  • 使用Ping++支付完成支付宝的支付&部分坑

    背景:1、只使用了支付宝手机支付。2、原有项目中有友盟,百度地图,Jpush三个SDK。 目标:完成支付宝支付就ok。 更新:2015年11月21日 17...

    用户2657851
  • 什么情况?又出新规定,微信支付和支付宝支付居然要被限额了?

    日前,人民银行发布《中国人民银行关于印发的通知》(下简称《通知》),配套印发了《条码支付安全技术规范(试行)》和《条码支付受理终端技术规范(试行)》,自2018...

    企鹅号小编
  • 支付宝支付-扫码支付

    扫码支付,指用户打开支付宝钱包中的“扫一扫”功能,扫描商户针对每个订单实时生成的订单二维码,并在手机端确认支付。

    Javen
  • springboot整合支付宝支付

    1、首先我们需要建立一个springboot工程,支付宝开发助手需要去支付宝开发平台去下载

    java后端指南
  • 支付宝支付中文乱码

    24-丰总
  • 对接【支付宝】支付接口

    最近在做支付宝的接口对接,之前做过一个版本,但是由于申请了新的账号以前旧的的接口对接就不能使用了 所以就开始对接新的版本接口对接,在这里也记录一下让那些还没有对...

    好好学java

扫码关注云+社区

领取腾讯云代金券