iOS应用内支付开始支持第三方支付公司排名了吗

支付平台_支付平台、第三方登录_API服务_API Store
支付平台(50个)最近应用审核被拒绝了,原因是因为使用了第三方支付,苹果说需要使用到应用内购买。但是查了下相关资料,太杂且不详细,好吧,所以现在自己来写博客咯,把我所知道的一一列出来,可能内容有点乱,大家就将就着些吧
一、创建应用
首先进入苹果的ItunesConnection()点击左上角的加号新建一个App应用,点击后该网站会弹出一个信息编辑框,大家只要将上面的信息填充完毕点击save即可在苹果的app平台上拥有一个属于自己的App。
在套装ID的上,需要提前为该App申请一个AppID以及BundleID,只要是申请成功了就会在选择列表中显示出来。如果有人有疑问如何申请,请看我之前那一篇推送的博客,里面有详细的步骤。附上链接。
这里顺便多说一句这个ItunesConnect是用来干嘛的,它是苹果公司给个人或企业提供管理自己App的一个平台。在这个平台上开发者可以新建,删除和管理自己的App应用,开发者可以根据需求对App应用进行上架与下架,编辑App信息,生成测试app所需的信息。具体操作我就不细说了。
二、填写协议、税务和银行业务
我们打开ItunesConnect,进入协议、税务和银行业务,配置相关信息。
填写相关信息,因为我是已经申请成功了,所以看到了就是下图
进入协议、税务和银行业务页面后,会有3种合同类型,如果你之前没有主动申请过去合同,那么一般你现在激活的合同只有iOS Free Application一种。
页面内容分为两块:
Request Contracts(申请合同)
Contracts In Effect(已生效合同)。
合同类型分为3种:
iOS Free Application(免费应用合同)
iOS Paid Application(付费应用合同)
iAd App笔者暂时只申请过付费应用合同,所以下面主要讲一下付费应用合同的申请流程。
1、填写联系方式
我们点击Contact Info下方的Set Up按钮可以进入联系方式填写页面,如下图:
如果你没有添加过联系人,你需要通过Add New Contact按钮来添加一个新的联系人。然后指定联系人的职务,职务如下:
Senior Management:高管
Financial:财务
Technical:技术支持
Legal:法务
Marketing:市场推广
如果你是独立开发者,可以全部填你自己一个人。
2、填写银行信息
  我们点击Bank Info下方的Set Up按钮可以进入联系方式填写页面,如下图:  
  选择你的银行账户,如果你没有,点击旁边的Add Bank Account添加一个账户。下面是添加一个账户的流程。
  2-1、选择银行所在的国家
  2-2、填写银行CNAPS Code    如果你不知道CNAPS Code是多少,可以点击Look up Transit Number来查询,查询时会根据3个关键信息来查询,如下:
Bank Name:银行的英文名称(不能是拼音)
City:银行所在的城市英文名称(中国的城市用拼音)
Postal Code:邮编然后在下面就会出来备选的银行,选择正确的银行后,点击next,进入下一步。
        
  2-3、确认银行信息
      2-4、填写银行账号信息
Bank Account Number:银行账号
Confirm Bank Account Number:再次输入银行账号
Account Holder Name:持卡人姓名,中文名用拼写,名在前,姓在后
Bank Account Currency:货币类型,一般国内的开发者选择CNY
      2-5、确认所有信息     3、填写税务信息 
  税务信息这一块了解不是很多,不过因为是国内开发者,可以不用太费心,税务信息分3种:
U.S Tax Forms: 美国税务
Australia Tax Forms:澳大利亚税务
Canada Tax Forms: 加拿大税务
    我选择的是U.S Tax Forms,选择后会问你两个问题,第一个问题如下:询问你是否是美国居民,有没有美国伙伴关系或者美国公司,如果没有直接选择No。
    接下来第二个问题如下:询问你有没有在美国的商业性活动,没有也直接选No。
  然后填写你的税务信息,包括以下几点:
Individual or Organization Name:个人或者组织名称
Country of incorporation: 所在国家
Type of Beneficial Owner:受益方式,独立开发者选个人
Permanent Residence:居住地址
Mailing address:邮寄地址
Name of Person Making this Declaration:声明人
Title:头衔
  填写完这些信息后就可以提交了
     4、等待审核
  当你填写完所有资料后,合同状态就会变成Processing, 大概24小时内就会有结果。
三、创建购买项目
 进入ItunesConnect,点击你的App,选择上面&功能&中的"App内购买项目",就可以看到右边有一个+号,如下图(最近因为被IPV6的问题给拒绝了)
  单击+号,选择你需要创建的购买类型
1、消耗型项目
2、非消耗型项目
3、自动续订型项目
4、免费订阅
5、非续订订阅
选择你需要创建的购买项目类型后,输入产品的参考名称、产品的ID,选择产品售价等级,然后单击添加语言输入你的产品相关信息,再上传屏幕预览,单击保存即创建购买项目成功。如下图:  &
  在上图所示的编辑框中输入,商品名称,产品ID以及价格等级,在这边说明一下:
  1.商品名称根据你的消费道具的实际意义来说明,比如&100颗宝石&,&100金币&等。
  2.产品ID是比较重要的,由项目自定义,只要唯一即可,像我一般都是用App的bundleID加一个后缀来表示,这样既跟项目关联又具有唯一性。
  3.价格等级的话&查看价格表&中有对应的说明,可以对照着表中每个国家的货币价格与等级来选择。
  创建购买项目成功后,回到App内购买项目,就可以看到我们刚刚创建的购买项目了。
四、添加应用购买测试帐号
  我们打开ItunesConnect,选择&用户和职能&选项, 我们可以看到有一个&沙箱技术测试员&,我们单击&+&号,添加我们的测试帐号,如下图:
    然后我们的相关信息,我就不一一列举了,如下图:
  单击&存储&,我们的测试帐号就创建成功了。下面开始撸代码了
五、撸代码咯
  1.首先在项目工程中加入&storekit.framework&,加入头文件#import &StoreKit/StoreKit.h&
  2.在进行使用App内购买页面.h文件中加入&SKPaymentTransactionObserver,SKProductsRequestDelegate&监听机制  
  我就开始贴代码吧
1 - (void)viewDidLoad {
[super viewDidLoad];
// 设置购买队列的监听器
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
if([SKPaymentQueue canMakePayments]){
//productID就是你在创建购买项目时所填写的产品ID
[self requestProductData: productID];
self.ringIndicator.hidden = YES;
NSLog(@"不允许程序内付费");
UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:@"温馨提示"
message:@"请先开启应用内付费购买功能。"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles: nil];
[alertError show];
23 #pragma mark - 请求商品
24 //请求商品
25 - (void)requestProductData:(NSString *)type{
NSLog(@"-------------请求对应的产品信息----------------");
NSArray *product = [[NSArray alloc] initWithObjects:type, nil];
NSSet *nsset = [NSSet setWithArray:product];
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
request.delegate =
[request start];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
36 #pragma mark 收到产品返回信息
37 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
self.ringIndicator.hidden = YES;
NSLog(@"--------------收到产品反馈消息---------------------");
NSArray *product = response.
if([product count] == 0){
[self showHUDTipWithTitle:@"没有该商品"];
NSLog(@"--------------没有商品------------------");
SKProduct *p =
for (SKProduct *pro in product) {
NSLog(@"pro info");
NSLog(@"SKProduct 描述信息:%@", [pro description]);
NSLog(@"localizedTitle 产品标题:%@", [pro localizedTitle]);
NSLog(@"localizedDescription 产品描述信息:%@", [pro localizedDescription]);
NSLog(@"price 价格:%@", [pro price]);
NSLog(@"productIdentifier Product id:%@", [pro productIdentifier]);
if([pro.productIdentifier isEqualToString: productID]){
money = [NSString stringWithFormat:@"%@",[pro price]];
NSLog(@"不不不相同");
SKPayment *payment = [SKPayment paymentWithProduct:p];
SKPayment *payment = [SKPayment paymentWithProductIdentifier:PayKey];
NSLog(@"发送购买请求");
[[SKPaymentQueue defaultQueue] addPayment:payment];
69 //请求失败
70 - (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
[self showHUDTipWithTitle:@"请求失败,错误"];
self.ringIndicator.hidden = YES;
NSLog(@"------------------错误-----------------:%@", error);
UIAlertView *alerView =
[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert",NULL) message:[error localizedDescription]
delegate:nil cancelButtonTitle:NSLocalizedString(@"Close",nil) otherButtonTitles:nil];
[alerView show];
79 - (void)requestDidFinish:(SKRequest *)request{
[self showHUDTipWithTitle:@"反馈信息结束"];
NSLog(@"------------反馈信息结束-----------------");
84 #pragma mark 监听购买结果
85 //监听购买结果
86 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
self.ringIndicator.hidden = YES;
NSLog(@" 监听购买结果 -----paymentQueue--------");
for (SKPaymentTransaction *transaction in transactions)
switch (transaction.transactionState)
case SKPaymentTransactionStatePurchased:{
NSLog(@"-----交易完成 --------");
//交易完成
[self commitSeversSucceeWithTransaction:transaction];
case SKPaymentTransactionStateFailed:{
NSLog(@"-----交易失败 --------");
//交易失败
[self failedTransaction:transaction];
case SKPaymentTransactionStateRestored:{
NSLog(@"-----已经购买过该商品(重复支付) --------");
//已经购买过该商品
[self restoreTransaction:transaction];
[self commitSeversSucceeWithTransaction:transaction];
case SKPaymentTransactionStatePurchasing:
//商品添加进列表
NSLog(@"-----商品添加进列表 --------");
127 //交易结束
128 - (void)completeTransaction: (SKPaymentTransaction *)transaction
NSLog(@" 交易结束 -----completeTransaction--------");
// Remove the transaction from the payment queue.
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
137 - (void)commitSeversSucceeWithTransaction:(SKPaymentTransaction *)transaction
NSString * productIdentifier = transaction.payment.productI
NSLog(@"productIdentifier Product id:%@", productIdentifier);
NSString *transactionReceiptString=
//系统IOS7.0以上获取支付验证凭证的方式应该改变,切验证返回的数据结构也不一样了。
if(SYSTEMVERSION &= 7.0){
// 验证凭据,获取到苹果返回的交易凭据
// appStoreReceiptURL iOS7.0增加的,购买交易完成后,会将凭据存放在该地址
NSURLRequest * appstoreRequest = [NSURLRequest requestWithURL:[[NSBundle mainBundle]appStoreReceiptURL]];
NSError *error =
NSData * receiptData = [NSURLConnection sendSynchronousRequest:appstoreRequest returningResponse:nil error:&error];
transactionReceiptString = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
NSData * receiptData = transaction.transactionR
transactionReceiptString = [receiptData base64EncodedString];
transactionReceiptString = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
NSLog(@"transactionReceiptString == %@",transactionReceiptString);
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
// 向自己的服务器验证购买凭证
// [self SendRequestWithtransactionReceiptString:transactionReceiptString Transaction:transaction];
167 //记录交易
168 -(void)recordTransaction:(NSString *)product{
NSLog(@"-----记录交易--------");
172 //处理下载内容
173 -(void)provideContent:(NSString *)product{
NSLog(@"-----下载--------");
177 - (void)failedTransaction:(SKPaymentTransaction *)transaction {
if(transaction.error.code != SKErrorPaymentCancelled) {
NSLog(@"购买失败");
UIAlertView *alerView2 =
[[UIAlertView alloc] initWithTitle:@"温馨提示"
message:@"购买该套餐失败,请重新尝试购买"
delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];
[alerView2 show];
NSLog(@"用户取消交易");
UIAlertView *alerView2 =
[[UIAlertView alloc] initWithTitle:@"温馨提示"
message:@"您已取消该购买"
delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];
[alerView2 show];
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
198 -(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction{
203 - (void) restoreTransaction: (SKPaymentTransaction *)transaction
NSLog(@" 交易恢复处理");
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
210 -(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error{
NSLog(@"-------paymentQueue----");
214 #pragma mark connection delegate
215 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
NSLog(@"connection==%@",
[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
-(void)dealloc
& & [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];//解除监听
代码我就不一一解释了。接下来我就给大家看运行后的结果。
最后给大家补充点东西,在与服务器做较验的时候,考虑到网络异常情况,服务器的验证应该是一个可恢复的队列,如果失败了,应该进行重试。
与苹果的验证接口文档在/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html#//apple_ref/doc/uid/TP4008267-CH104-SW3 。简单来说就是将购买凭证用Base64编码,然后Post给苹果的验证服务器,苹果将验证结果以JSON形式返回。
苹果AppStore线上的购买凭证地址是: , 测试地址是:。
注意事项:
苹果在审核应用时,只会在沙盒(sandbox)环境购买,其产生的购买凭证,也只能连接苹果的测试验证服务器。但是审核的应用又是连接的线上服务器,那应该判断苹果正式验证服务器的返回状态码,如果 是21007,则再一次连接测试服务器进行验证即可。/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html&&上有对返回的状态码的详细说明。
阅读(...) 评论()苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的电子书阅读器怎么解决这个问题?
连接电脑,上传下载好的电子书。如果对您有帮助,请点击左下角“对我有用” ,谢谢
指的是使用手机支付功能。手机支付就是允许移动用户使用其移动终端(通常是手机)对所消费的商品或服务进行账务支付的一种服务方式。中国移动已经可以办理这种业务。你说的...
1:打开『设置』看下应用,看通知是不是全部打开了。2:双击home键(就是中间的圆圈)看到后台程序,往右推。你就会看到有一个音量控制,看看开了没有。3:打开『设...
这要看合同中(包括你已经接受的用户守则)有没有约定。如果没有约定,确实不合适。给你造成损失的,可以起诉要求赔偿。
答: 怎样取消值机呢?手机APP
答: 美国苹果公司的新款手机,全触屏的智能机,在中国卖的很贵。
答: 手机购买还是找正规卖家
天猫等网站
答: 可能被设置了禁言你IP接入吧
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415iOS 如何接入第三方支付(上)
视频太卡?试试切换线路
本课时讲解微信支付 SDK 的接口规则、规范和业务流程。
本课时介绍如何接入微信 SDK,微信支付开发步骤,API 介绍,以及在接入过程中应该注意的问题。
本课时介绍支付宝支付 SDK 的交互流程、参数说明。
本课时介绍如何接入支付宝 SDK,支付宝支付开发步骤,以及介绍在接入过程中应该注意的问题。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [微信支付 SDK 详解]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [微信支付 SDK 详解]您还可以使用以下方式登录
当前位置:&>&&>&&>& > iOS开发之第三方支付支付宝支付教程
iOS开发之第三方支付支付宝支付教程
支付宝支付大致流程为 :1. 公司与支付宝进行签约 ,获得商户ID(partner)和账号ID(seller)和私钥(privateKey),开发中用到的,很重要。&请商户在里进行产品签约;审核:商户登录,可在&签约订单&中查看审核进度。 2. 下载支付宝SDK 网址:https://doc./doc2/detail.htm?treeId=54&articleId=104509&docType=1&3. 生成订单 ,签名加密。4. 开始支付,调起支付宝客户端或者网页端,然后进行支付,由支付宝与银行系统进行打交道,并由支付宝返回处理的结果给客户端。5. 展示对应的支付结果给客户。&下面详细介绍, 商户公钥,商户私钥,支付宝公钥,支付宝私钥,RSA生成方式,DSA生成方式。商户公钥: 这个上传到支付宝后台换取 支付宝的公钥 、 支付宝公钥(后面代码中会用到,非常重要)商户私钥: 这个下订单的时候会用到。 (非常重要)支付宝公钥: 由商户公钥上传到支付宝后台生成 支付宝公钥 (非常重要)&&&1.商户公钥与商户私钥的生成 (DSA方式):生成方式一(推荐):使用支付宝提供的一键生成工具(内附使用说明)&Windows:下载MAC OSX:下载&OpenSSL& pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem #Java开发者需要将私钥转换成PKCS8格式OpenSSL& rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #生成公钥OpenSSL& exit #退出OpenSSL程序解压打开文件夹,直接运行&支付宝RAS密钥生成器SHAwithRSA.bat&(WINDOWS)或&SHAwithRSA1024_mand&(MACOSX),点击&生成RSA密钥&,会自动生成公私钥,然后点击&打开文件位置&,即可找到工具自动生成的密钥。生成方式二:也可以使用OpenSSL工具命令生成首先进入OpenSSL工具,再输入以下命令。&OpenSSL& genrsa -out rsa_private_key.pem 1024#生成私钥&经过以上步骤,开发者可以在当前文件夹中(OpenSSL运行文件夹),看到rsa_private_key.pem(RSA私钥)、rsa_private_key_pkcs8.pem(pkcs8格式RSA私钥)和rsa_public_key.pem(对应RSA公钥)3个文件。开发者将私钥保留,将公钥提交给支付宝网关,用于验证签名。以下为私钥文件和公钥文件示例。注意:对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空格,作为开发者私钥,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。更详细信息:https://doc./doc2/detail?treeId=58&articleId=103242&docType=1&2.商户公钥与商户私钥的生成 (DSA方式):&进入OpenSSL工具,再输入以下命令。&12345OpenSSL& dsaparam-outdsa_param.pem1024#生成参数文件OpenSSL& gendsa-outdsa_private_key.pemdsa_param.pem#生成私钥OpenSSL& pkcs8-topk8-informPEM-indsa_private_key.pem-outformPEM-nocrypt-outdsa_private_key_pkcs8.pem#Java开发者需要将私钥转换成PKCS8格式OpenSSL& dsa-indsa_private_key_pkcs8.pem-pubout-outdsa_public_key.pem #生成公钥OpenSSL& exit #退出OpenSSL程序&经过以上步骤,开发者可以在当前文件夹中(OpenSSL运行文件夹),看到dsa_private_key.pem(DSA私钥)、dsa_private_key_pkcs8.pem(pkcs8格式DSA私钥)、dsa_public_key.pem(对应DSA公钥)和dsa_param.pem(参数文件)4个文件。开发者将私钥保留,将公钥提交给支付宝网关,用于验证签名。注意:对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空格,作为开发者私钥,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。更详细信息:https://doc./doc2/detail.htm?spm=a219a..0.JDjRVa&treeId=58&articleId=103581&docType=1&3. 上传RSA 商户公钥 , 获取支付宝公钥。 以及查看支付宝 RSA生成公钥。上传RSA商户公钥: https://doc./doc2/detail.htm?spm=a219a..0.kDer5c&treeId=58&articleId=103578&docType=1查看支付宝RSA生成公钥: https://doc./doc2/detail.htm?spm=a219a..0.50COsb&treeId=58&articleId=103546&docType=14. 上传DSA商户公钥 , 获取支付宝公钥。 以及查看支付宝DSA生成公钥。上传DSA商户公钥:https://doc./doc2/detail.htm?spm=a219a..0.6SrtUf&treeId=58&articleId=103577&docType=1查看支付宝DSA生成公钥: https://doc./doc2/detail.htm?spm=a219a..0.c9oA4U&treeId=58&articleId=103576&docType=1&&通过上面的讲解:大家应该吧 : 商户私钥、 支付宝公钥、商户ID(partner)和账号ID(seller) 都记录下来。&3.支付宝 SDK 集成讲解:1. 从下载出来的SDK中吧以下文件取出来,并保存到另外一个文件夹,如下文件:&2。我们把上面这个文件拖入新建的工程里面。3. 导入依赖库 (出现莫名其妙的错误的时候,多检查下 依赖库, 看是不是添加少了)然后编译程序, 然后发现 unknown type nesting ,int, nsdata之类的语句, 这个是因为没有引入对应的框架。解决办法在出错的类里面加上&#import #import &&在编译程序:说openssl/asn1.h not found.&解决方法如下:&现在编译项目,应该是编译通过了。&设置 URL types&设置 支付宝白名单。 在info.plist 文件中添加&&项目结构预览:&4.正式编码:&appdelegate.h#import #import &Product.h&@protocol
alipyDelegate -(void)alipydidS-(void)alipydidF@end@interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *@property (weak
, nonatomic) id aliD-(void)payByAlipay:(Product *)@end&&appDelegate.m#import &AppDelegate.h&#import #import &Product.h&#import &Order.h&#import &DataSigner.h&@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;}-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
[self alipayUrlAction:url];
return YES;}-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
//有多中支付方式,要用scheme 来进行判断,看是那种途径的url.
[self alipayUrlAction:url];
return YES;}-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
[self alipayUrlAction:url];
return YES;}-(void)alipayUrlAction:(NSURL *)url{
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
if ([[resultDic valueForKey:@&resultStatus&] intValue] == 9000) {
if ([_aliDelegate respondsToSelector:@selector(alipydidSuccess)]) {
[_aliDelegate alipydidSuccess];
if ([_aliDelegate respondsToSelector:@selector(alipydidFaile)]) {
[_aliDelegate alipydidFaile];
}];}-(void)payByAlipay:(Product *)product{
*商户的唯一的parnter和seller。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
/*============================================================================*/
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
NSString *partner = @&&;
NSString *seller = @&&;
签约账号。
NSString *privateKey = @&&;
//partner和seller获取失败,提示
if ([partner length] == 0 ||
[seller length] == 0 ||
[privateKey length] == 0)
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@&提示&
message:@&缺少partner或者seller或者私钥。&
delegate:self
cancelButtonTitle:@&确定&
otherButtonTitles:nil];
[alert show];
*生成订单信息及签名
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner =
order.sellerID =
order.outTradeNO = @&xxxxxx&; //订单ID(由商家自行制定)
order.subject = product.productN //商品标题
order.body = product.productN //商品描述
order.totalFee = [NSString stringWithFormat:@&%.2f&,product.price]; //商品价格
order.notifyURL =
@&&; //回调URL
order.service = @&mobile.securitypay.pay&;
order.paymentType = @&1&;
order.inputCharset = @&utf-8&;
order.itBPay = @&30m&;
order.showURL = @&&;
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @&alisdkdemo&;
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@&orderSpec = %@&,orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString =
if (signedString != nil) {
orderString = [NSString stringWithFormat:@&%@&sign=\&%@\&&sign_type=\&%@\&&,
orderSpec, signedString, @&RSA&];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@&reslut = %@&,resultDic);
if ([[resultDic valueForKey:@&resultStatus&] intValue] == 9000) {
if ([_aliDelegate respondsToSelector:@selector(alipydidSuccess)]) {
[_aliDelegate alipydidSuccess];
if ([_aliDelegate respondsToSelector:@selector(alipydidFaile)]) {
[_aliDelegate alipydidFaile];
}}@end&ViewController.h#import @interface ViewController : UIViewController@end&ViewController.m#import &ViewController.h&#import &Product.h&#import &Order.h&#import #import &AppDelegate.h&@interface ViewController ()@property (weak, nonatomic) IBOutlet UITableView *myTableV@property(nonatomic, strong)NSMutableArray *productL@end@implementation ViewController- (void)viewDidLoad {
[super viewDidLoad];
[self generateData];}#pragma mark -#pragma mark
==============产生随机订单号==============- (NSString *)generateTradeNO{
static int kNumber = 15;
NSString *sourceStr = @&ABCDEFGHIJKLMNOPQRSTUVWXYZ&;
NSMutableString *resultStr = [[NSMutableString alloc] init];
srand((unsigned)time(0));
for (int i = 0; i & kN i++)
unsigned index = rand() % [sourceStr length];
NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
[resultStr appendString:oneStr];
return resultS}#pragma mark -#pragma mark
==============产生订单信息==============- (void)generateData{//
NSArray *subjects = @[@&1&,//
@&2&,@&3&,@&4&,//
@&5&,@&6&,@&7&,//
@&8&,@&9&,@&10&];
NSArray *body = @[@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&,
@&我是测试数据&];
self.productList = [[NSMutableArray alloc] init];
for (int i = 0; i & [body count]; ++i) {
Product *product = [[Product alloc] init];
product.productName = [body objectAtIndex:i];
product.price = 0.01f+pow(10,i-2);
[self.productList addObject:product];
}}#pragma mark -#pragma mark UITableViewDelegate- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 55.0f;}#pragma mark -#pragma mark UITableViewDataSource- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.productList count];}////用TableView呈现测试数据,外部商户不需要考虑//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@&Cell&];
Product *product = [self.productList objectAtIndex:indexPath.row];
cell.textLabel.text = product.productN
cell.detailTextLabel.text = [NSString stringWithFormat:@&一口价:%.2f&,product.price];}#pragma mark -#pragma mark
==============点击订单模拟支付行为==============////选中商品调用支付宝极简支付//- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
*点击获取prodcut实例并初始化订单信息
Product *product = [self.productList objectAtIndex:indexPath.row];
AppDelegate *appdele = (AppDelegate *)[UIApplication sharedApplication].
[appdele payByAlipay:product];
[tableView deselectRowAtIndexPath:indexPath animated:YES];}- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.}@end&Product.h#import @interface Product : NSObject@property (nonatomic, copy)
NSString* productN@property (nonatomic, assign)@end&&product.m#import &Product.h&@implementation Product@end&&上传RSA公钥&就爱阅读网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    

我要回帖

更多关于 第三方支付公司排名 的文章

 

随机推荐