iOS微信支付簽名驗證失敗原因

1.首先確認(rèn)后臺預(yù)支付的訂單是否和微信支付對象PayReq中的屬性值是否一一對應(yīng)

  //需要創(chuàng)建這個支付對象
    PayReq *req   = [[PayReq alloc] init];
    //由用戶微信號和AppID組成的唯一標(biāo)識惠爽,用于校驗微信用戶
    req.openID = @" 唯一標(biāo)識";
    // 商家id铅搓,在注冊的時候給的
    req.partnerId = @"商家 id";
    
    // 預(yù)支付訂單這個是后臺跟微信服務(wù)器交互后杂抽,微信服務(wù)器傳給你們服務(wù)器的,你們服務(wù)器再傳給你
    req.prepayId  = self.payOrderItem.prepay_id;
    // 根據(jù)財付通文檔填寫的數(shù)據(jù)和簽名
    //這個比較特殊亡哄,是固定的鸭廷,只能是即req.package = Sign=WXPay
    req.package   = @"Sign=WXPay";

    // 隨機(jī)編碼枣抱,為了防止重復(fù)的,在后臺生成
    req.nonceStr  = self.payOrderItem.nonce_str;
    
    NSDate *datenow = [NSDate date];
    NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];
    UInt32 timeStamp =[timeSp intValue];
    // 這個是時間戳辆床,也是在后臺生成的佳晶,為了驗證支付的
    req.timeStamp = timeStamp;

2.確認(rèn)sign 的值,微信中的支付對象有一個sing 屬性讼载,該屬性為簽名轿秧。該屬性的值比較特殊,需要后臺做好二次簽名后才可以直接使用咨堤,如果后臺沒有做二次簽名需要我們自己做的話需要用一下方法對菇篡,sign 值進(jìn)行處理

// 這個簽名也是后臺做的,但是后臺沒有做
    req.sign = self.payOrderItem.sign;
    req.sign = [self createMD5SingForPayWithAppID:req.openID partnerid:req.partnerId prepayid:req.prepayId package:req.package noncestr:req.nonceStr timestamp:req.timeStamp];
    
    //發(fā)送請求到微信一喘,等待微信返回onResp
    [WXApi sendReq:req];
}
-(NSString *)createMD5SingForPayWithAppID:(NSString *)appid_key partnerid:(NSString *)partnerid_key prepayid:(NSString *)prepayid_key package:(NSString *)package_key noncestr:(NSString *)noncestr_key timestamp:(UInt32)timestamp_key{
        NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
        [signParams setObject:appid_key forKey:@"appid"];//微信appid 例如wxfb132134e5342
        [signParams setObject:noncestr_key forKey:@"noncestr"];//隨機(jī)字符串
        [signParams setObject:package_key forKey:@"package"];//擴(kuò)展字段  參數(shù)為 Sign=WXPay
        [signParams setObject:partnerid_key forKey:@"partnerid"];//商戶賬號
        [signParams setObject:prepayid_key forKey:@"prepayid"];//此處為統(tǒng)一下單接口返回的預(yù)支付訂單號
        [signParams setObject:[NSString stringWithFormat:@"%u",timestamp_key] forKey:@"timestamp"];//時間戳
        
        NSMutableString *contentString  =[NSMutableString string];
        NSArray *keys = [signParams allKeys];
        //按字母順序排序
        NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            return [obj1 compare:obj2 options:NSNumericSearch];
        }];
        //拼接字符串
        for (NSString *categoryId in sortedArray) {
            if (   ![[signParams objectForKey:categoryId] isEqualToString:@""]
                && ![[signParams objectForKey:categoryId] isEqualToString:@"sign"]
                && ![[signParams objectForKey:categoryId] isEqualToString:@"key"]
                )
            {
                [contentString appendFormat:@"%@=%@&", categoryId, [signParams objectForKey:categoryId]];
            }
        }
        //添加商戶密鑰key字段  API 密鑰
        [contentString appendFormat:@"key=%@", @"商戶秘鑰"];
        NSString *result = [contentString md5String];//md5加密
        return result;
    }

MD5加密的字符串分類

- (NSString *)md5String
    {
        if(self == nil || [self length] == 0) return nil;
        unsigned char digest[CC_MD5_DIGEST_LENGTH], i;
        CC_MD5([self UTF8String], (int)[self lengthOfBytesUsingEncoding:NSUTF8StringEncoding], digest);
        NSMutableString *ms = [NSMutableString string];
        for(i=0;i<CC_MD5_DIGEST_LENGTH;i++)
        {
            [ms appendFormat: @"%02x", (int)(digest[i])];
        }
        return [ms copy];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驱还,一起剝皮案震驚了整個濱河市嗜暴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌议蟆,老刑警劉巖闷沥,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咐容,居然都是意外死亡舆逃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門戳粒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來路狮,“玉大人,你說我怎么就攤上這事蔚约⊙俜粒” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵炊琉,是天一觀的道長展蒂。 經(jīng)常有香客問我又活,道長苔咪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任柳骄,我火速辦了婚禮团赏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耐薯。我一直安慰自己舔清,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布曲初。 她就那樣靜靜地躺著体谒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪臼婆。 梳的紋絲不亂的頭發(fā)上抒痒,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音颁褂,去河邊找鬼故响。 笑死,一個胖子當(dāng)著我的面吹牛颁独,可吹牛的內(nèi)容都是我干的彩届。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼誓酒,長吁一口氣:“原來是場噩夢啊……” “哼樟蠕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寨辩,失蹤者是張志新(化名)和其女友劉穎寂汇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捣染,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡骄瓣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耍攘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榕栏。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蕾各,靈堂內(nèi)的尸體忽然破棺而出扒磁,到底是詐尸還是另有隱情,我是刑警寧澤式曲,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布妨托,位于F島的核電站,受9級特大地震影響吝羞,放射性物質(zhì)發(fā)生泄漏兰伤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一钧排、第九天 我趴在偏房一處隱蔽的房頂上張望敦腔。 院中可真熱鬧,春花似錦恨溜、人聲如沸符衔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽判族。三九已至,卻和暖如春项戴,著一層夾襖步出監(jiān)牢的瞬間形帮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工肯尺, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留沃缘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓则吟,卻偏偏與公主長得像槐臀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氓仲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容