<html>

这篇具有很好参考价值的文章主要介绍了<html>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在iOS开发中,经常会涉及到支付功能,这里对常见的微信支付做一下详细说明

1. 微信支付

1.1 微信开放平台账号的注冊

微信开放平台(微信支付须要付费的。注冊成功后使用的主要为AppKey/SecretKey,当中SecrectKey交由后台完毕集成)
微信开放平台是商户APP接入微信支付开放接口的申请入口。通过此平台可申请微信APP支付。


平台入口:http://open.weixin.qq.com。

1.2 项目的改动与设置

1)首先应该下载SDK并导入项目(这里以友盟自带微信支付说明,详细内容类似)
假设项目中使用了友盟社会化分享SDK,那么你将不须要反复导入SDK,友盟中已经集成了微信支付。详细SDK例如以下:

假设你的项目没有使用友盟。请到开放平台下载最新的SDK,然后倒入您的项目。详细的SDK例如以下:

2)在加入完SDK后须要加入相应的库以及文件

3)然后是加入相应的url用于调起

4) 加入白名单、关闭Bitcode(对于http/https适配iOS9.0自行改动)

1.3 SDK的注冊与回调

在完毕了上面的操作之后,我们所导入的SDK就能够使用了,非常easy
1) 首先我们要进行注冊
导入#import “WXApi.h”

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    ViewController *userGuideViewController = [[ViewController alloc] init];
    self.window.rootViewController = userGuideViewController;
    [WXApi registerApp:@"这里加入APPKey"];
    return YES;
}

2)接着我们要写一个调起

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
    // 跳转到URL scheme中配置的地址
    //NSLog(@"跳转到URL scheme中配置的地址-->%@",url);
    return [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
}

3)然后是回调

//支付成功时调用,回到第三方应用中
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //    NSLog(@"****************url.host -- %@",url.host);
    if ([url.scheme isEqualToString:@"这里加入AppKey"])
    {
        return  [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    return YES;
}
- (void) onResp:(BaseResp*)resp
{
    NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
    NSString *strTitle = @"支付结果";

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

        switch (resp.errCode) {
            case WXSuccess:
                strMsg = @"支付结果:成功!";

                break;
            case WXErrCodeUserCancel:
                strMsg = @"支付结果:用户点击取消!

"; break; case WXErrCodeSentFail: strMsg = @"支付结果:发送失败。"; break; case WXErrCodeAuthDeny: strMsg = @"支付结果:授权失败。"; break; default: strMsg = @"支付结果:微信不支持!"; break; } UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alert show]; } }

1.4 SDK的使用

1) 最后是在项目中须要进行微信支付的地方使用支付(这是完毕整个支付流程中最重要的一部分,也是最须要注意的地方
首先要进行一次网络请求。后台接口,将你的商品信息发送到后台,生成订单后返回。返回信息中最少要包括六个參数,通过这些參数调起支付。
导入#import “WXApi.h”

//返回參数调起支付
PayReq* req             = [[PayReq alloc] init];
            NSMutableDictionary *dict=[result objectForKey:@"resultCode"];

            req.openID              = [dict objectForKey:@"appid"];
            req.partnerId           = [dict objectForKey:@"mch_id"];
            req.prepayId            = [dict objectForKey:@"prepay_id"];
            req.nonceStr            = [self md5:time_stamp];
            req.timeStamp           = [time_stamp intValue];
            req.package             = @"Sign=WXpay";

            //签名(这个签名能够自己进行签名,也能够后台操作,由后台返回)
            NSMutableDictionary *signParams=[[NSMutableDictionary alloc] init];
            [signParams setObject: req.openID        forKey:@"appid"];
            [signParams setObject: req.nonceStr    forKey:@"noncestr"];
            [signParams setObject: req.package      forKey:@"package"];
            [signParams setObject: req.partnerId        forKey:@"partnerid"];
            [signParams setObject: time_stamp   forKey:@"timestamp"];
            [signParams setObject: req.prepayId     forKey:@"prepayid"];
            req.sign                = [self createMd5Sign:signParams];

            //调起支付(**參数有一个错误,将不能完毕调起**)
            [WXApi sendReq:req];

2) 自行加密处理(这部分能够由后台完毕)

//微信支付加密
-(NSString *) md5:(NSString *)str
{
    const char *cStr = [str UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, (unsigned int)strlen(cStr), digest );

    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02X", digest[i]];

    return output;
}

-(NSString*) createMd5Sign:(NSMutableDictionary*)dict
{
    NSMutableString *contentString  =[NSMutableString string];
    NSArray *keys = [dict allKeys];
    //按字母顺序排序
    NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 compare:obj2 options:NSNumericSearch];
    }];
    //拼接字符串
    for (NSString *categoryId in sortedArray) {
        if (![[dict objectForKey:categoryId] isEqualToString:@""]
            && ![categoryId isEqualToString:@"sign"]
            && ![categoryId isEqualToString:@"key"]
            )
        {
            [contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
        }
    }
    //加入key字段
    [contentString appendFormat:@"key=%@", @"这里加入SecretKey"];

    NSString *md5Sign =[WXUtil md5:contentString];

    return md5Sign;
}

1.5常见异常Bug处理

1) 常见问题为微信支付调起不成功,每次调起仅仅能调起一个带有你返回确认button的页面。


原因:參数错误。特别注意參数(签名)。后台的返回的參数不对。


解决方式:逐个校验參数。签名能够本地加密处理,不要依赖后台的返回签名。有的时候后台返回的是不对的。

阅读全文
版权声明:本文为博主原创文章。未经博主同意不得转载。

举报

  • 本文已收录于下面专栏:
2条评论
发表评论
HTML/XML objective-c Delphi Ruby PHP C# C++ JavaScript Visual Basic Python Java CSS SQL 其他

相关文章推荐

【iOS】原生微信登录和分享

年前的时候。公司说须要在APP里面做微信、新浪和QQ的第三方登录。当时,因为APP已经集成了微信支付、微信、新浪和QQ的分享ShareSDK(精简版)。后来在集成微信、新浪和QQ的第三方登陆地时候,S...
  • zhuming3834
  • 2016-03-22 20:17
  • 4188

ios 应用内跳转微信

寻常我们做iOS开发,会常常遇到打开其它的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。

我们的目标是: 打开别人的APP让别人打开我们的APPiOS9的适配问题使用URL Schemes...

  • TianYou_Code
  • 2016-09-06 10:23
  • 3617

iOS接入微信支付(小白都能看懂的微信支付)

由于最近项目中须要接入微信支付功能,自己也爬了非常多的坑,所以做了一下这边文章供大家学习參考。远离爬坑,文章主要讲到下面五部分: 一、 填写商户平台所需资料 填写商户平台所需资料 一、填写经营信息...
  • hotdog12345a
  • 2016-10-08 13:37
  • 6199

iOS-支付宝&微信支付

一. 微信支付 1.所须要的材料 微信SDK 微信SDK在微信开放平台上面申请得到的參数 // 应用的APPID kWXAppID @"wxc82cXXXXXXXX" //...
  • u011452278
  • 2017-06-02 18:00
  • 562

iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客

亲们, 首先让我们来看一下微信支付的流程吧. 1. 注冊微信开放平台。创建应用获取appid,appSecret。申请支付功能。申请成功之后会返回一些參数. 2. 下载微信支付sdk 3. 客户...
  • qq_31810357
  • 2016-04-15 18:00
  • 11567

iOS-微信支付总结

前言:在iOS开发中。经常会涉及到支付功能,而微信支付是不可缺少的,这里笔者就简单整理了一下微信支付的流程。即使分享也是对自己学习的总结。

一. 微信集成的基本流程(所需资料由公司提供)微信商户申请步骤...

  • Scorpio_27
  • 2016-09-12 17:09
  • 936

iOS微信支付接入

如今基本全部的App都会接入支付宝支付以及微信支付。也有非常多第三方提供给你 SDK帮你接入,可是这样的涉及到支付的东西还是自己server搞来的好一些,事实上搞懂了 逻辑很的简单,以下直接给大...
  • sheng_bin
  • 2017-05-14 22:13
  • 286

iOS微信支付开发

第一次集成微信支付出现了非常多问题,当然微信支付假设是后台返回二次签名数据,这样做的话。就简单非常多了,本文主要集中解说的是微信支付怎样在本地生成预支付订单,以及预支付订单的二次签名(ps.第一次写这种...
  • lixingqiao01
  • 2015-12-23 17:22
  • 889

[iOS]关于微信支付

一,前期准备: 1.到微信的开放平台注冊账号:https://open.weixin.qq.com     2.进入管理中心--->移动应用--->创建移动应用:依据提示完好应用资料 3.审核通过后,...
  • lqq200912408
  • 2016-02-29 22:21
  • 3629

iOS开发支付集成之微信支付

微信支付也是须要签名的,也跟支付宝一样,能够在client签名,也能够在后台签名(当然,为了安全还是推荐在server上做签名,逻辑也比較好理解)。 集成前首先要看看文档 ...
  • qq_34047841
  • 2016-07-13 09:47
  • 574

小马哥的博客

+关注
原创
14
粉丝
28
喜欢
0
  • iOS - UIMenuController:UITextField去掉拷贝、粘贴。UILabel自己定义长按拷贝
  • iOS - 监控键盘高度、屏蔽字符、限制字符个数
  • iOS - 经常使用代码片
  • iOS - 正則表達式
很多其它文章

在线课程

【直播】计算机视觉原理及实战—屈教授
【套餐】Spark+Scala课程包--陈超
  • 微博
    微信
    QQ
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多仅仅同意输入30个字)文章来源地址https://www.toymoban.com/news/detail-711214.html

到了这里,关于<html>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++学习笔记八:极限和数学运算<limits><cmath>

    1) limits库: 1.1 源文档: https://en.cppreference.com/w/cpp/types/numeric_limits #include limits   1.2 库函数: 函数解释: 对于一个浮点数,lowest表示最小的可表示的负数,min表示最小的可表示的接近0的数,max表示最大的可表示的正数 对于一个有符号整数,min表示可以表示的最小的负数,

    2024年02月05日
    浏览(40)
  • 详解dedecms后台编辑器将回车<br>改为<p>的方法

    DEDECMS编辑器默认回车[确认键]是返回 这样的。 有时候我们需要返回 这样的,今天我们就讲讲后台编辑器将回车将 改为 的有效教程吧。 方法也很简单,首先我们找到dedecms后来台编辑器的配置文件。 所在路径为:/include/ckeditor/config.js 我们打开它,里面有两个字: 替换为 这

    2024年02月02日
    浏览(49)
  • class<T extends interface> 或 class<T extends abstract class>

    Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 类型通配符一般是使用 ? 代替具体的类型参数 要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends,最后紧跟它的上界

    2024年02月12日
    浏览(37)
  • 将较大的数组赋值<el-table></el-table>时,会导致页面卡顿,甚至崩溃

    遇到的问题:将长度为40的数组数据赋值el-table/el-table,我发现loading没有效果,后面发现是页面卡住了,loading直接没有出现。 经过查询资料,发现el-table会有卡顿的问题,看到有的博主推荐使用一款叫umy-ui的插件,我就试了试,发现卡顿的问题解决了。 官网: http://www.umyui

    2024年02月05日
    浏览(62)
  • ChatGPT还是有点东西的-public static <T> List<T> Arrays.asList(T... a) {...}

    业务开发需要判断业务状态是否在30、40、50、60的集合内,所以写了以下代码 自我Review代码时,验证了下这行代码,发现状态为30时,仍然返回false。 在自我怀疑中调整代码,并验证,代码如下: 没想很明白,于是问了下ChatGPT。 Arrays.asList() 方法返回的结果类型取决于传入的

    2024年02月12日
    浏览(39)
  • protolator - Protobuf <==> json

    github.com/hyperledger/fabric-config/protolator 是 Hyperledger Fabric 中的一个 Go 包,用于将 Protocol Buffers(ProtoBuf)消息和 JSON 格式之间进行转换。它提供了一种方便的方式来将 Fabric 配置文件(以 ProtoBuf 格式表示)与 JSON 配置文件之间进行相互转换。这对于 Fabric 的配置管理和部署非常有

    2024年02月15日
    浏览(33)
  • <四>move移动语义和forward类型转发

    move : 移动语义,得到右值类型 forward:类型转发,能够识别左值和右值类型 只有两种形式的引用,左值引用和右值引用,万能引用不是一种引用类型,它存在于模板的引用折叠情况,但是能够接受左值和右值 区分左值和右值得一个简单方式就是能不能取地址 一个右值一旦有名字那

    2024年02月02日
    浏览(35)
  • <五>move移动语义和forward类型转发

    move : 移动语义,得到右值类型 forward:类型转发,能够识别左值和右值类型 只有两种形式的引用,左值引用和右值引用,万能引用不是一种引用类型,它存在于模板的引用折叠情况,但是能够接受左值和右值 区分左值和右值得一个简单方式就是能不能取地址 一个右值一旦有名字那

    2024年02月02日
    浏览(39)
  • 编写高性能C#代码 —— Span<T>

    Span 提供任意内存的连续区域的类型安全和内存安全表示形式。它是在堆栈而不是托管堆上分配的ref结构,是对任意内存块的抽象 。 在NET Core 2.1中首次引入 提供对 任意 内存上的连续区域的读写 视图 利用索引/迭代来修改范围内的内存 几乎无开销   Span 表示 任意内存的连续

    2024年02月05日
    浏览(48)
  • < Python全景系列-2 > Python数据类型大盘点

    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。 Python作为一门强大且

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包