美文网首页
iOS App获取微信发票列表

iOS App获取微信发票列表

作者: 小锤子_ | 来源:发表于2020-11-26 16:26 被阅读0次

需求就是外部app 获取微信里的发票助手里面的发票信息。

先看看微信文档
https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Reimburser_API_List.html#4

(1)先获取Token

就是用Get 请求获取token ,参数有两个APPID,和APPSECRET ,这两个参数我们在平台创建APP时候就得到了

 NSString *url = [NSString stringWithFormat:@"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%@&secret=%@",@"你的appid",@"你的secret"];

参考文档:https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/Nontax_Bill/API_list.html#1.1

(2)获取ticket

就是用Get 请求获取ticket ,参数是上一步获取的token。其他参数定值。

 NSString *url = [NSString stringWithFormat:@"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%@&type=wx_card",token];

参考文档:https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/Nontax_Bill/API_list.html#1.1

(3)获取签名数据

看一下文档里的签名算法
参考文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62

主要代码:

#import <CommonCrypto/CommonDigest.h>

- (NSString *)sha1:(NSString *)input

{

NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];

uint8_t digest[CC_SHA1_DIGEST_LENGTH];

CC_SHA1(data.bytes, (unsigned int)data.length, digest);

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

for(int i=0; i<CC_SHA1_DIGEST_LENGTH;i++){

[output appendFormat:@"%02x", digest[i]];

}

return output;

}


-(NSString *)getCardsign:(NSString *)ticket
{
    
    NSMutableDictionary *parDic = [NSMutableDictionary dictionary];

    NSString *timestamp = [NSString stringWithFormat:@"%ld",(long)[NSDate date].timeIntervalSince1970];

    [parDic setObject:timestamp forKey:@"timestamp"];

    NSString *nonceStr= [NSString stringWithFormat:@"%d", rand()];

    [parDic setObject:nonceStr forKey:@"nonceStr"];

    [parDic setObject:ticket forKey:@"api_ticket"];

    [parDic setObject:@"你的appID" forKey:@"appid"];

    [parDic setObject:@"INVOICE" forKey:@"cardType"];

    //先把这个存起来,因为后面进入微信用到的时间戳,要和签名这一致,不然拿不到发票列表

    [[NSUserDefaults standardUserDefaults] setObject:parDic forKey:@"cardSignDic"];

    [[NSUserDefaults standardUserDefaults] synchronize];

    NSMutableString *contentString=[NSMutableString string];

    NSArray *values = [parDic allValues];

    //按字母顺序排序

    NSArray *sortedArray = [values sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    return [obj1 compare:obj2 options:NSNumericSearch];

    }];

    //拼接字符串

    for (NSString *value in sortedArray) {

    [contentString appendFormat:@"%@", value];

    }

    NSString *cardSign = [self sha1:contentString];

    return cardSign;

}

(4)吊起微信获取发票信息

-(void)goTowechat:(NSString *)sign
{
    
    NSDictionary *parDic = [[NSUserDefaults standardUserDefaults] objectForKey:@"cardSignDic"];

    WXChooseInvoiceReq *chooseInvoiceReq = [[WXChooseInvoiceReq alloc] init];

    chooseInvoiceReq.appID = @"你的appID";

    //前面获取的

    chooseInvoiceReq.cardSign = sign;

    //前面存的

    chooseInvoiceReq.nonceStr = [parDic objectForKey:@"nonceStr"];

    chooseInvoiceReq.signType = @"SHA1";

    //前面存的

    chooseInvoiceReq.timeStamp = [[parDic objectForKey:@"timestamp"] doubleValue];

    [WXApi sendReq:chooseInvoiceReq completion:^(BOOL success) {
        
        
        
    }];
}

回调方法在微信的回调代理方法中

主要代码

- (void)onResp:(BaseResp *)resp
{
   
  
   if ([resp isKindOfClass:[WXChooseInvoiceResp class]]){

   //这里面有数组,自己怎么用都行了,over

   WXChooseInvoiceResp *chooseInvoiceResp = (WXChooseInvoiceResp *)resp;

       NSLog(@"%@",chooseInvoiceResp.cardAry);
       
       
   }

   
}




相关文章

网友评论

      本文标题:iOS App获取微信发票列表

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