微信支付

来源:互联网 发布:电信云计算发展措施 编辑:程序博客网 时间:2024/05/16 06:48

先介绍一下步骤

1 配置平台信息,这是基本条件,具体就不讲了。

2.微信支付必须跟后台相配合,本地生成订单->提交订单信息.->返回参数(订单ID 、支付ID***  等一系列参数)

3.设置支付参数、本地MD5签名

4.调起微信支付


-(void)pay

              // 拿到返回的订单参数后。indentData 则为提交订单后返回的参数

                   [ self chuanzhidata:indentData];

          //调起微信支付  也是最后一步

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

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

                req.openID              = [dict objectForKey:@"appid"];

                req.partnerId           = [dict objectForKey:@"partnerid"];

                req.prepayId            = [dict objectForKey:@"prepayid"];

                req.nonceStr            = [dict objectForKey:@"noncestr"];

                req.timeStamp           = stamp.intValue;

                req.package             = [dict objectForKey:@"package"];

                req.sign                = [dict objectForKey:@"sign"];

                [WXApisendReq:req];

}


// 第一步

-(NSMutableDictionary *)chuanzhidata:(NSDictionary *)dicdata

{


   //dicdata  向服务器提交支付订单的返回值。

      //设置支付参数

   NSString *time_stamp;

    time_t now;

    time(&now);

    time_stamp  = [NSString stringWithFormat:@"%ld", now];

    NSString *appid = [NSStringstringWithFormat:@"%@",[[dicdataobjectForKey:@"weixin"]objectForKey:@"appid"]];

    NSString *nonce_str = [[dicdata objectForKey:@"weixin"] objectForKey:@"nonce_str"];

    NSString *package = @"Sign=WXPay";

    NSString *mchid = [NSString stringWithFormat:@"%@",[[dicdata objectForKey:@"weixin"] objectForKey:@"mch_id"]];

    time_stamp = time_stamp;

    NSString *prePayid = [NSString stringWithFormat:@"%@",[[dicdata objectForKey:@"weixin"] objectForKey:@"prepay_id"]];

    

    

    NSMutableDictionary *signParams = [NSMutableDictionary dictionary];

    [signParams setObject: appid        forKey:@"appid"];

    [signParams setObject: nonce_str    forKey:@"noncestr"];

    [signParams setObject: package      forKey:@"package"];

    [signParams setObject: mchid        forKey:@"partnerid"];

    [signParams setObject: time_stamp   forKey:@"timestamp"];

    [signParams setObject: prePayid     forKey:@"prepayid"];

    // [signParams setObject: @"MD5"       forKey:@"signType"];

  //生成签名,调用下一个方法

    NSString *sign  = [self createMd5Sign:signParams];

    [signParams setObject: sign forKey:@"sign"];

    return signParams;

    

}

 //第二步

-(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=%@", @"*************"]; //秘钥,可找后台拿到

    //得到MD5 sign签名

    NSString *md5Sign =[WXUtil md5:contentString];

    

    //输出Debug Info

    //   [debugInfo appendFormat:@"MD5签名字符串:\n%@\n\n",contentString];

    

    return md5Sign;

}


 支付结果

appdelegate.m

 

-(void) onResp:(BaseResp*)resp

{

    NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];

    NSString *strTitle;

    

    if([resp isKindOfClass:[SendMessageToWXResp class]])

    {

        strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];

    }

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

        //支付返回结果,实际支付结果需要去微信服务器端查询

        strTitle = [NSString stringWithFormat:@"支付结果"];

        

        switch (resp.errCode) {

            case WXSuccess:

                strMsg = @"支付结果:成功!";

                break;

            default:

                strMsg = [NSString stringWithFormat:@"支付结果:失败"];

                break;

        }

    }

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

    [alert show];

}







0 0
原创粉丝点击