微信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只能二选一

微信iOS SDK使用

原文:http://www.cnblogs.com/jasonyuan1986/p/4543827.html

以上是微信iOS SDK使用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>