iOS微信電子發(fā)票獲取

開發(fā)目標(biāo):實現(xiàn)從微信獲取發(fā)票列表并多選選擇發(fā)票在系統(tǒng)中

使用要求:微信開放平臺iOS sdk版本1.7.7以上版本(增加發(fā)票)

開發(fā)步驟(比較簡單,均通過微信官文get請求完成,我用的AF請求的,這個隨意)

1、請求AccessToken,只需你的appid 和 appsecret就行了;不過這個一般都是由服務(wù)器來控制,便于管理,時限是7200s。

- (void)getWxAccessToken

2、獲取api_ticket,需要用到第一步的AccessToken;臨時票據(jù),后面簽名使用

(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、獲取簽名方法,需要用到的參數(shù),看下圖方法:


- (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"];

//先把這個存起來,因為后面進入微信用到的時間戳,要和簽名這一致,不然拿不到發(fā)票列表

[[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、進入微信,請求發(fā)票信息

//請求發(fā)票信息

+ (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];

}


到這就可以進入到微信,看到你開的電子發(fā)票的列表了;

怎么獲取信息?

進入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) {

//設(shè)置實現(xiàn)回調(diào)的類,寫上面的方法的單例類就行

return [WXApi handleOpenURL:url delegate:yourdelegate];

}

return YES;

}

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

//設(shè)置實現(xiàn)回調(diào)的類,寫上面的方法的單例類就行

return[WXApi handleOpenURL:urldelegate:yourdelegate];

}

回調(diào)方法:

-(void)onResp:(BaseResp*)resp

{

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

//這里面有數(shù)組,自己怎么用都行了,over

WXChooseInvoiceResp *chooseInvoiceResp = (WXChooseInvoiceResp *)resp;

}

}

很簡單,微信良心。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目前項目里有微信支付的需求,調(diào)研過一段時間后,發(fā)現(xiàn)其實并沒有想象中的那么困難。如果你只是想實現(xiàn)該功能,一個方法足以...
    劉光軍_MVP閱讀 1,534評論 0 7
  • 與微信官方簽署在線協(xié)議 導(dǎo)入微信支付需要的SDK相關(guān)文件 配置App跳轉(zhuǎn)的白名單 添加URL Schemes 配置...
    閣子菌閱讀 455評論 0 7
  • 西風(fēng)漾明夜,蛩動星輝。南客躡步虛飛。冰輪起轉(zhuǎn)渡河漢,藍橋微渺光馳。登樓仰仙闕,碧閣黏朱戶,玉宇檐低?,幣_露冷,尚寒...
    不可詩意的橙子閱讀 206評論 0 0
  • 一路走來,錯過了太多風(fēng)景,于是那些錯過的,也就成了最美的。 再見 秦墨白下了車,肆意的吸收著另一個城市的空氣。這是...
    季末微涼閱讀 287評論 0 0
  • 如果你給不了我想要的擁抱,那我還有什么理由再堅持下去?
    尚亦夕閱讀 112評論 0 1

友情鏈接更多精彩內(nèi)容