iOS微信电子发票获取

开发目标:实现从微信获取发票列表并多选选择发票在系统中

使用要求:微信开放平台iOS sdk版本1.7.7以上版本(增加发票)

开发步骤(比较简单,均通过微信官文get请求完成,我用的AF请求的,这个随意)

1、请求AccessToken,只需你的appid 和 appsecret就行了;不过这个一般都是由服务器来控制,便于管理,时限是7200s。

- (void)getWxAccessToken

2、获取api_ticket,需要用到第一步的AccessToken;临时票据,后面签名使用

(void)getWxApi_ticket

{

//https请求方式: GET

AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];

NSMutableDictionary *mudic = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"wx_card",@"type", nil];

//上文提供的

[mudic setObject:access_token forKey:@"access_token"];

[managerGET:@"https://api.weixin.qq.com/cgi-bin/ticket/getticket" parameters:mudicprogress:nil success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {

NSString *ticket = [responseObject objectForKey:@“ticket”];

}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error){}];}

3、获取签名方法,需要用到的参数,看下图方法:


- (NSString *)getCardsign

{

NSMutableDictionary *parDic = [NSMutableDictionary dictionary];

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

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

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

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

[parDic setObject:[[NSUserDefaults standardUserDefaults]objectForKey:@"wx_ticket"] forKey:@"api_ticket"];

[parDic setObject:WXAPPKEY 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 = [valuessortedArrayUsingComparator:^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;

}


//sha1加密方式

- (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 = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

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

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

}

return output;

}

4、进入微信,请求发票信息

//请求发票信息

+ (BOOL)chooseInvoice

{

NSDictionary *parDic = [[NSUserDefaults standardUserDefaults] objectForKey:@"cardSignDic"];

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

chooseInvoiceReq.appID = appid;

//前面获取的

chooseInvoiceReq.cardSign = xxx;

//前面存的

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

chooseInvoiceReq.signType = @"SHA1";

//前面存的

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

return [WXApi sendReq:chooseInvoiceReq];

}


到这就可以进入到微信,看到你开的电子发票的列表了;

怎么获取信息?

进入appdelegate

- (BOOL) application:(UIApplication*)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString*)sourceApplication annotation:(nonnull id)annotation {

NSLog(@"%@", url.absoluteString);

NSLog(@"Calling Application Bundle ID: %@",sourceApplication);

NSLog(@"URL scheme:%@", [url scheme]);

NSLog(@"URL query: %@", [url query]);

if([sourceApplication rangeOfString:WXAPP_ID].length > 0) {

//设置实现回调的类,写上面的方法的单例类就行

return [WXApi handleOpenURL:url delegate:yourdelegate];

}

return YES;

}

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url {

//设置实现回调的类,写上面的方法的单例类就行

return[WXApi handleOpenURL:urldelegate:yourdelegate];

}

回调方法:

-(void)onResp:(BaseResp*)resp

{

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

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

WXChooseInvoiceResp *chooseInvoiceResp = (WXChooseInvoiceResp *)resp;

}

}

很简单,微信良心。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难。如果你只是想实现该功能,一个方法足以...
    劉光軍_MVP阅读 1,447评论 0 7
  • 与微信官方签署在线协议 导入微信支付需要的SDK相关文件 配置App跳转的白名单 添加URL Schemes 配置...
    阁子菌阅读 412评论 0 7
  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 2,908评论 0 7
  • 西风漾明夜,蛩动星辉。南客蹑步虚飞。冰轮起转渡河汉,蓝桥微渺光驰。登楼仰仙阙,碧阁黏朱户,玉宇檐低。瑶台露冷,尚寒...
    不可诗意的橙子阅读 177评论 0 0
  • 一路走来,错过了太多风景,于是那些错过的,也就成了最美的。 再见 秦墨白下了车,肆意的吸收着另一个城市的空气。这是...
    季末微凉阅读 221评论 0 0