Heim >WeChat-Applet >WeChat-Entwicklung >Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung
In diesem Artikel wird hauptsächlich der Fall der WeChat-Zahlungsentwicklung für iOS ausführlich vorgestellt, der einen gewissen Referenzwert hat.
Die WeChat-Zahlung weist viele Fallstricke auf und die bereitgestellten offiziellen Dokumente sind nicht vollständig überhaupt, und die Demo ist auch „schüchtern“ und schwer zu verstehen. Viele Details, auf die geachtet wurde, wurden nicht berücksichtigt und viele Umwege wurden gemacht. Daher ist der Systementwicklungsprozess wie folgt. (Die vollständige Demo ist am Ende des Blogs beigefügt.) Dies umfasst die Kompatibilitätsverarbeitung der WeChat-Zahlungsentwicklung und des Alipay-Entwicklungsanrufclients. (Die beiden Signaturen werden auf dem mobilen Endgerät platziert. Der Blog erwähnt nicht die Situation, in der der WeChat-Client nicht installiert wird. Es ist auch sehr einfach, anhand des Rückgabewerts 0 zu beurteilen, wenn diese Methode aufgerufen wird [WXApi sendReq:request].)
1. Umgebungskonfiguration
1. Zuerst erfolgt der Zugriff auf das https-Protokoll. Legen Sie die Whitelist in plist fest
2. Wenn Sie WeChat zum Teilen, Sammeln, Bezahlen, Anmelden usw. verwenden, müssen Sie den folgenden Code (LSApplicationQueriesSchemes) in „Info.plist“ hinzufügen
3 . Lösen Sie das Problem, dass Bitcode nicht kompiliert werden kann
Diese Rückruffunktion muss in Delegate.m geschrieben werden!!!
4. Code für einen bestimmten Ansichtscontroller (Ansichtscontroller mit WeChat-Zahlungsfunktion)
4.1 Senden Sie eine Vorauszahlungsbestellung, um die Vorbestellungs-ID zu erhalten (dieser Vorgang muss zweimal signiert werden, nämlich ohne Parameter und Signatur. Tragen Sie Parametersignaturen bei . Diese Methoden wurden natürlich in der Klasse payRequsestHandler gekapselt. Sie müssen nur die Parameter übergeben, um die Methode aufzurufen.) Dies ist auch die Aktionsmethode zum Klicken auf die Zahlungsschaltfläche
4.2 Nachdem Sie die Prepaid-Bestellung erhalten haben, können Sie die Kundenserviceseite der WeChat-Zahlung anpassen (4.2- und 4.1-Codes sind aufeinanderfolgend)
Zwei unabhängige Pakete mit Vorzeichenparametersignatur Methode: Ich habe nicht die von payRequsestHandler gekapselte Methode verwendet, sondern sie selbst geschrieben, da nach der Verwendung ein Problem aufgetreten ist (der Screenshot des Problems lautet wie folgt). Machen Sie zuerst einen Screenshot des Codes und stellen Sie dann einen Code bereit Block, der direkt kopiert und eingefügt werden kann
Screenshot des Problems: (Ich glaube, viele Leute sind darauf gestoßen. Ich war dort, es ist zu 100 % ein Schilderproblem)
Methode eins:
Methode zwei:
3. Kompatibilitätsverarbeitung der Proxy-Methoden von Alipay- und WeChat-Zahlungsrückruf-Clients
4. Demo
Code kopieren und einfügen (Signatur signieren)-(NSString )createMD5SingForPay:(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”]; [signParams setObject:noncestr_key forKey:@”noncestr”]; [signParams setObject:package_key forKey:@”package”]; [signParams setObject:partnerid_key forKey:@”partnerid”]; [signParams setObject:prepayid_key forKey:@”prepayid”]; [signParams setObject:[NSString stringWithFormat:@”%u”,(unsigned int)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字段 [contentString appendFormat:@”key=%@”, @”这里填写商户密钥”]; NSString *result = [self md5:contentString]; return result; }//创建发起支付时的sige签名 -(NSString ) md5:(NSString )str { const char *cStr = [str UTF8String]; unsigned char result[16]= “0123456789abcdef”; CC_MD5(cStr, (CC_LONG)strlen(cStr), result); //这里的x是小写则产生的md5也是小写,x是大写则md5是大写,这里只能用大写,微信的大小写验证很逗 return [NSString stringWithFormat: @”%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X”, result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; }//MD5 加密
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!