微信iOS SDK使用

微信支付:

首先需要在入口函数注册:

//向微信注册
    [WXApi registerApp:APP_ID withDescription:@"微信Api"];

注册回调delegate:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return  [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    if ([sourceApplication isEqualToString:@"com.tencent.xin"]) {
        return  [WXApi handleOpenURL:url delegate:self];
    }
}
- (void)onResp:(BaseResp *)resp {
    if ([resp isKindOfClass:[PayResp class]]) {
        PayResp *response = (PayResp *)resp;
        switch (response.errCode) {
            case WXSuccess:
            {
                //服务器端查询支付通知或查询API返回的结果再提示成功

                break;
            }
            default:
            {

                break;
            }
        }
    }
}

发起微信支付代码:

//================================
                    //预付单参数订单设置
                    //================================
                    NSDictionary *dict = [resultDic objectForKey:@"data"];
                    NSNumber *ordernoNum = [dict objectForKey:@"payId"];
                    NSString *orderno = [ordernoNum stringValue];
                    NSString *order_name = @"来啦洗车-支付订单";
                    NSString *order_price = [NSString stringWithFormat:@"%d", [[SharedInfo shared].totalAmount intValue] * 100];
                    srand( (unsigned)time(0) );
                    NSString *noncestr  = [NSString stringWithFormat:@"%d", rand()];
                    NSMutableDictionary *packageParams = [NSMutableDictionary dictionary];
                    NSString *ipAddress = [SharedInfo getIPAddress:YES];

                    [packageParams setObject: APP_ID            forKey:@"appid"];       //开放平台appid
                    [packageParams setObject: MCH_ID            forKey:@"mch_id"];      //商户号
                    [packageParams setObject: noncestr          forKey:@"nonce_str"];   //随机串
                    [packageParams setObject: @"APP"            forKey:@"trade_type"];  //支付类型,固定为APP
                    [packageParams setObject: order_name        forKey:@"body"];        //订单描述,展示给用户
                    [packageParams setObject: NOTIFY_URL        forKey:@"notify_url"];  //支付结果异步通知
                    [packageParams setObject: orderno           forKey:@"out_trade_no"];//商户订单号
                    [packageParams setObject: ipAddress         forKey:@"spbill_create_ip"];//发器支付的机器ip
                    [packageParams setObject: order_price       forKey:@"total_fee"];       //订单金额,单位为分

                    //获取prepayId(预支付交易会话标识)
                    payRequsestHandler *payHandler = [[payRequsestHandler alloc] init];
                    [payHandler init:APP_ID mch_id:MCH_ID];
                    [payHandler setKey:PARTNER_ID];
                    NSString *prePayid;
                    prePayid            = [payHandler sendPrepay:packageParams];

                    if ( prePayid != nil) {
                        //获取到prepayid后进行第二次签名

                        NSString    *package, *time_stamp, *nonce_str;
                        //设置支付参数
                        time_t now;
                        time(&now);
                        time_stamp  = [NSString stringWithFormat:@"%ld", now];
                        nonce_str    = [WXUtil md5:time_stamp];
                        //重新按提交格式组包,微信客户端暂只支持package=Sign=WXPay格式,须考虑升级后支持携带package具体参数的情况
                        //package       = [NSString stringWithFormat:@"Sign=%@",package];
                        package         = @"Sign=WXPay";
                        //第二次签名参数列表
                        NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
                        [signParams setObject: APP_ID        forKey:@"appid"];
                        [signParams setObject: nonce_str    forKey:@"noncestr"];
                        [signParams setObject: package      forKey:@"package"];
                        [signParams setObject: MCH_ID        forKey:@"partnerid"];
                        [signParams setObject: time_stamp   forKey:@"timestamp"];
                        [signParams setObject: prePayid     forKey:@"prepayid"];
                        //[signParams setObject: @"MD5"       forKey:@"signType"];
                        //生成签名
                        NSString *sign  = [payHandler createMd5Sign:signParams];

                        //添加签名
                        [signParams setObject: sign         forKey:@"sign"];

                        NSMutableString *stamp  = [signParams objectForKey:@"timestamp"];

                        //调起微信支付
                        PayReq* req             = [[PayReq alloc] init];
                        req.openID              = [signParams objectForKey:@"appid"];
                        req.partnerId           = [signParams objectForKey:@"partnerid"];
                        req.prepayId            = [signParams objectForKey:@"prepayid"];
                        req.nonceStr            = [signParams objectForKey:@"noncestr"];
                        req.timeStamp           = stamp.intValue;
                        req.package             = [signParams objectForKey:@"package"];
                        req.sign                = [signParams objectForKey:@"sign"];
                        [SharedInfo shared].aliPayType = @"2";
                        [WXApi sendReq:req];

微信分享代码:

     UIImage *image = [UIImage imageNamed:@"ShareSmallImage"];
        WXMediaMessage *message = [WXMediaMessage message];
        [message setThumbImage:image];

    //    WXImageObject *ext = [WXImageObject object];
    //    ext.imageData = UIImageJPEGRepresentation(image, 1.0f);

        WXAppExtendObject *ext = [WXAppExtendObject object];
        ext.url = @"https://itunes.apple.com/cn/app/lai-la-xi-che/id990872887?l=en&mt=8";

        message.mediaObject = ext;
        message.title = @"来啦洗车";
        message.description = @"欢迎使用来啦洗车";

        SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
    //    req.text = @"123";
        req.message = message;
        req.scene = 0;

        [WXApi sendReq:req];

scene: 0为会话,1为朋友圈,2为收藏

message和text只能二选一

时间: 2024-10-09 23:12:23

微信iOS SDK使用的相关文章

微信iOS SDK文档总结

至今共19个类,分3大类. (1)请求与响应类:微信终端和第三方程序:第三方程序和微信服务器. BaseReq:所有请求类的基类. GetMessageFromWXReq:微信终端向第三方程序请求提供内容请求类型. LaunchFromWWXReq:     微信终端打开第三方程序请求类型. SendMessageToWXReq:  第三方程序发送消息至微信终端程序的接口. ShowMessageFromWXReq:要求第三方程序显示的消息结构体. BaseResp:所有响应类的基类. GetM

iOS 关于微信检测SDK应用的原理浅析

微信作为一个开放平台,各方面都是做得比较好的,推出了SDK之后,微信与使用了SDK的应用便能进行更多交互.但在iOS平台上,应用间交换数据还是相对麻烦的,那么微信为什么能直接在应用检测到其他使用了SDK的应用呢?基于这个疑问,我用了一个下午研究其原理. 一.SDK的方法 我之前也没使用过微信的SDK,不过下载后,查看发现SDK接口有这么一段 1 /*! @brief WXApi的成员函数,在微信终端程序中注册第三方应用. 2 * 3 * 需要在每次启动第三方应用程序时调用.第一次调用后,会在微信

iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修改就先要跑起来啊. 根据错误提示,判断是libwechatsdk.a里面没有这个方法.顺藤摸瓜按照下面的步骤开始了解决旅途. 阶段一 1. 手动添加了微信支付SDK源码到工程 2. pod 'UMengUShare/Social/WeChat'添加了微信分享, 编译时报错如下: 说明导入的微信支付S

Android应用之——微信微博sdk使用过程中的一些常见问题

前言 最近在使用第三方登录和分享的过程中遇到了很多问题,一方面可以归结为自己经验的不足,另一方面其实也说明了官方文档的含糊不清.这篇博文不会写关于如何使用第三方登录分享,因为官方文档已经写明了步骤,这里要写的东西是官方文档里面没用说明的一些问题,也是我自己在摸索的过程中发现和解决的问题. 一.微博登录和分享 微博sdk的集成过程官方下载的sdk文档中已经基本说明清楚了,这里不提了,说两个经常遇到过问题. 1.登录后停留在授权页,也就是登录后没有返回我们的应用,排除代码方面的原因后,还有几个原因导

微信支付SDK开发教程

今天研究了一下微信的SDK开发教程,下面我就简单的把步骤介绍下,希望对你们有所帮助 现在的支付都是使用V3接口的,2014年9月之前都是使用V2接口,现在我就介绍下V2和V3接口的申请方法吧 一.微信支付v2 1. 使用网页授权接口 使用网页授权接口获取用户的基本信息. [微信公众号]OAuth2.0授权.pdf点击下载 2. 使用共享收货地址控件 使用共享收货地址控件,获取用户在微信的收货地址.[微信公众号支付]收货地址共享接口文档V1.6.pdf点击下载 3. 使用公众号发起支付请求 使用J

iOS SDK详解之NSScanner-分析String

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:NSScanner是分析String,把String转为substring和数字的很好的工具.它使用一个NSString初始化,使用的时候通常从开头处扫描直到结尾. 本文会先举出两个例子,然后详细的讲解NSScanner的方法.源码是

微信iOS多设备多字体适配方案总结

一.背景 2014下半年,微信iOS版先后适配iPad, iPhone6/6plus.随着这些大屏设备的登场,部分用户觉得微信的字体太小,但也有很多用户不喜欢太大的字体.为了满足不同用户的需求,我们做了全局字体设置功能,在[设置-通用-字体大小]这里修改设置后,微信大部分界面都会随之缩放. 二.多设备适配 1.各设备的逻辑分辨率: 关于iphone6/6plus的物理分辨率.逻辑分辨率.屏幕物理尺寸.PPI等资料,很多文章已经有详细说明了,这里就不再累赘.对于终端开发人员来说,其实我们需要关心的

高德地图iOS SDK限制地图的缩放比例

问题 高德地图的iOS SDK 3D版中(v2.4.0), 显示范围在560m左右时建筑会呈现3D效果. 我们有没有办法可以限制地图最小缩放到这个比例, 从而保证建筑始终使用3D效果显示呢? 探索 高德地图的MAMapView再怎么封装也是个UIView, 通过加断点很容易看出它的结构 很明显, 地图上的操作都是依赖UIGestureRecognizer来处理的. 为了限制地图的交互, 我们只需要想办法修改一下这些gesture的处理逻辑即可. 对于pinch操作它提供了handlePinch:

基于微信的SDK的学习与使用——实现产品支付(一)

声明本篇博客为作者原创,本篇是继支付宝支付之后本人又学习的第二种支付实现,本篇着重于原理与注意事项的学习. 参考  参考 微信支付的开发文档相比支付宝的比较简单,但是使用功能丝毫也不含糊,我觉得简单易读的文档是吸引开发者做出喜好选择的第一步.但是个人觉得,微信支付与支付宝的支付的实现思路大致雷同,并不能说是微信另开思路进行支付创新. 微信支付的官方文档中提供了扫码支付.公众号支付.App支付支付模式.开发者要实现用微信支付的功能,需要商户向微信官方申请微信支付权限,商户获得权限后,将支付账户信息