美文网首页支付,提款
第三方支付(微信、支付宝、银联)

第三方支付(微信、支付宝、银联)

作者: 煎饼果子郑能量 | 来源:发表于2016-01-13 09:29 被阅读302次

    前言

    其实支付很简单,下载官方的SDK,根据里面的开发者文档和Demo,配置支付,不会可以问客服。(毕竟掏钱了嘛)

    支付宝支付 (根据支付宝开发包流程进行操作)

    1、下载官方SDK

    支付宝SDK下载官方网站

    https://doc.open.alipay.com/doc2/detail

    2、添加依赖库 

    添加头文件

    (直接把官方的Order类文件拉进去 还有libcrypto.a libssl.a 这两个静态库也拉进去 openssl 文件夹 Util文件夹 毕竟人家都写好了 不用白不用)

    #import "Order.h" 

    #import "DataSigner.h"

    #import<AlipaySDK/AlipaySDK.h>

    iOS9需要 配置ATS(App TransPort Security)

    在相对应的info.list文件添加ATS 在Allow Arbitrary Loads 选择YES (没办法啊只能先用http吧)

    报错'NSObject' 'Base64' 添加头文件 #import<Foundation/Foundation.h>

    路径找不到的错误 就在“Build Settings”选项卡,在搜索框中,以关键字“search”搜索,对“Header Search Paths”增加头文件路径:$(SRCROOT)/项目名称。

    重要参数

    商户的唯一的parnter和seller签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller

    parnter是商户ID 以 2088 开头由 16 位纯数字组成的字符串。

    seller是账户ID 支付宝收款账号,手机号码或邮箱格式。

    私钥:用来加密.在前端进行使用

    公钥:用来解密.通过网页的形式上传到支付宝公司

    事例Demo

    首先在AppDelegate.m引入头文件#import<AlipaySDK/AlipaySDK.h>

    然后添加返回数据的方法

    -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

    {

    [[AlipaySDK defaultService]

    processOrderWithPaymentResult:url

    standbyCallback:^(NSDictionary *resultDic) {

    NSLog(@"result = %@",resultDic);//返回的支付结果 

    //【由于在跳转支付宝客户端支付的过程中,商户 app 在后台很可能被系统 kill 了,所以 pay 接 口的 callback 就会失效,请商户对 standbyCallback 返回的回调结果进行处理,就是在这个方法 里面处理跟 callback 一样的逻辑】

    }];

    return YES;

    }

    在Info.plist里面添加URL types 添加item URL identifier 再添加 URL Schemes 再添加一个字符串类型 这就是返回的字符串 (必须添加 坑点!!!)

    /*    *商户的唯一的parnter和seller。    *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。    */    //以2088开头由16位纯数字字符串  

      NSString *partner = @"2088501566833063";//商户ID   

     NSString *seller = @"wangxiang@qq.com";//账户id手机号码 或者邮箱格式   

     NSString *privateKey = @"好大一串密码!";//私钥    //公钥用来解密的        //partner和seller获取失败,提示   

     if ([partner length] == 0 ||     

       [seller length] == 0 ||   

         [privateKey length] == 0)  

      {        NSLog(@"缺少partner和seller或者私匙");        return;    }     

       /*    *生成订单信息及签名    */  

      //将商品信息赋予AlixPayOrder的成员变量  

      Order *order = [[Order alloc] init];   

     order.partner = partner;  

      order.seller = seller;   

     order.tradeNO = @"20160109095"; //订单ID(由商家自行制定)  

      order.productName = @"煎饼果子郑能量"; //商品标题   

     order.productDescription = @"煎饼果子最好吃只要998"; //商品描述  

      order.amount = [NSString stringWithFormat:@"%.2f",998.80]; //商品价格   

     //跟公司后台服务器进行回调 支付完成后告诉后台是否成功  (.2f貌似改了支付不能完成)

      order.notifyURL =  @"http://app.chengchina.com/wash/unionpay/mobilenotify"; //回调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    

    NSString *appScheme = @"alisdkdemo";   //将商品信息拼接成字符串   

     NSString *orderSpec = [order description];  

      NSLog(@"orderSpec = %@",orderSpec);       

     //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode    

    id<DataSigner>signer = CreateRSADataSigner(privateKey);

    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) {

    //支付宝回调信息 标示成功或者失败 还是用户取消 网络中断等

    NSLog(@"reslut = %@",resultDic);

    }];

    }

    9000 订单支付成功

    8000 正在处理中

    4000 订单支付失败

    6001 用户中途取消

    6002 网络连接出错


    微信支付

    SDK下载网址 (微信更简单)

    【微信支付】APP支付开发者文档

    先注册一个APPID

    商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。

    这个id是在AppDelegate.m里面的didFinishLaunchingWithOptions的方法里面用的

    添加依赖库

    再添加SDKExport文件夹 从官方Demo拖

    头文件引用

    #import "WXApi.h"

    #import "WXApiObject.h"

    客户端错误码 (这都是定好的)

    编译 改错

    实例

    PayReq *request = [[PayReq alloc] init];

    //    商家向财付通申请的商家id

    request.partnerId = @"1220277201";

    //    预支付订单:包含商品的标题 描述 价格等商品信息

    request.prepayId= @"920103900016010965/5";

    //相当于一种标识

    request.package = @"Sign=WXPay";

    /** 随机串,防重发 */

    request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";

    //从1970年之后的秒数 还是防止重复

    request.timeStamp= 139777777; //时间戳

    //商家根据微信开放平台文档对数据做的签名 加密数据用的

    request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";

    //调用微信支付

    [WXApi sendReq:request];

    在AppDelegate.m里面添加#import "WXApi.h"  协议WXApiDelegate

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   

    //向微信注册appid  

      //Description : 更新后的api 起到解释的作用  

      [WXApi registerApp:@"wx920fde9f97d60569" withDescription:@"微信支付"];    

        return YES;

    }

    -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

    {

    return [WXApi handleOpenURL:url delegate:self];

    }

    #pragma mark -WXApiDelegate

    -(void)onResp:(BaseResp*)resp{

    //微信支付后回调代理方法

    //返回一些支付成功 失败的信息

    if ([resp isKindOfClass:[PayResp class]]){

    PayResp*response=(PayResp*)resp;

    switch(response.errCode){

    case WXSuccess:

    //服务器端查询支付通知或查询API返回的结果再提示成功

    NSLog(@"支付成功");

    break;

    default:

    NSLog(@"支付失败,retcode=%d",resp.errCode);

    break;

          }

       }

    }


    银联支付

    官方SDK地址  (这个地址是个坑 银联就是牛 下载包还是RAR格式)

    商家技术服务

    银联支付代码很少就两行 难点在于配置银联支付

    这个SDK有两个版本 这两个版本是不兼容的,两个都导入就会报错

    1、支持无卡交易静态库,简称UPPayPlugin, 包含三个文件UPPayPlugin.h UPPayPluginDelegate.h libUPPayPlugin.a 

    2、支持纯无卡交易和VIPOS音频口支付静态库 UPPayPluginPro (这是要用POS机的)

    UPPayPluginPro.h  UPPayPluginDelegate.h libUPPayPluginPro.a

    如果是UPPayPlugin 要添加 QuartzCore.framework 、Security.framework 这两个依赖库

    如果是UPPayPluginPro 要添加 QuartzCore.framework 、AudioToolbox.framework 这两个依赖库

    把sdk 拉进工程 引入框架

    实现<UPPayPluginDelegate>代理

    //startPay 预支付订单 标题 价格 描述

    //mode 环境 00表示正式 01表示测试

    //常见错误 把.m 改成.mm格式 

    [UPPayPlugin startPay:@"201601090436140530789" mode:@"00" viewController:self delegate:self]; //就这一行

    写一个支付方法的回调

    #pragma mark -UPPayPluginDelegate

    -(void)UPPayPluginResult:(NSString *)result

    {

    NSLog(@"支付完成后的回调 %@",result);

    }

    在budsiting 搜索linking

    搜索 c++ sta  C++ Standard Library 属性值修改为 Compiler Default

    搜索 c++ la  C++ Language Dialect 属性值修改为 Compiler Default

    这样就完成配置了

    运行 这样就实现银联支付了。

    相关文章

      网友评论

        本文标题:第三方支付(微信、支付宝、银联)

        本文链接:https://www.haomeiwen.com/subject/hjxckttx.html