iOS微信APP支付填坑!(跳轉微信支付,只有確定按鈕)


這兩天接微信支付的SDK,遇到了一個天坑,微信文檔里面不寫清楚,demo里面也沒有,參數少了一個無法支付啊有沒有!有沒有!有沒有!

最后調試成功,得知真相的我眼淚掉下來。。。

先讓我們看看是什么情況:

--------------------------------------------------------我是分割線--------------------------------------------------------

預支付訂單那塊就不說了,基本上都沒問題,服務器會返回一個prepay_id預支付訂單號,拿到這個訂單號在接下來的支付操作中會用到。

根據微信的文檔還有demo顯示,支付的時候需要這幾個參數應該就夠了

/** 商家向財付通申請的商家id */
@property (nonatomic, retain) NSString *partnerId;
/** 預支付訂單 */
@property (nonatomic, retain) NSString *prepayId;
/** 隨機串,防重發 */
@property (nonatomic, retain) NSString *nonceStr;
/** 時間戳,防重發 */
@property (nonatomic, assign) UInt32 timeStamp;
/** 商家根據財付通文檔填寫的數據和簽名 */
@property (nonatomic, retain) NSString *package;
/** 商家根據微信開放平台文檔對數據做的簽名 */
@property (nonatomic, retain) NSString *sign;

看着沒什么問題吧,把前面幾個參數用字典序拼接,然后用key加密就生成sign了是吧,是不是都這么認為的?

no!圖樣圖森破!!!

如果你按照這樣簽名去支付的話,會看到這樣的界面

不明真相的你一定會一臉懵比

誰曾想,微信這個大坑X!要簽名的參數還差一個appid!把這個參數拼接簽名之后,再次跳轉微信支付就會有相應的訂單信息了。

 代碼如下:

    PayReq *payRequest = [[PayReq alloc] init];
    payRequest.partnerId = @"13473*****";
    payRequest.prepayId = prepayid;
    payRequest.nonceStr = [NSString randomString];
    payRequest.timeStamp = [ZHDeviceModel shareModel].timesStamp.doubleValue / 1000;
    payRequest.package = @"Sign=WXPay";
    NSDictionary *params = @{@"partnerid" : payRequest.partnerId,
                             @"prepayid" : payRequest.prepayId,
                             @"noncestr" : payRequest.nonceStr,
                             @"timestamp" : [NSNumber numberWithInt:payRequest.timeStamp],
                             @"package" : payRequest.package,
                             @"appid" : @"wxa8a4*********",
                             }.mutableCopy;
    payRequest.sign = [[MD5Model wChatSignedStringWithDic:params] uppercaseString];
    [WXApi sendReq:payRequest];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM