Heim  >  Artikel  >  WeChat-Applet  >  Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

高洛峰
高洛峰Original
2017-03-27 13:30:342286Durchsuche

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

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

2. Wenn Sie WeChat zum Teilen, Sammeln, Bezahlen, Anmelden usw. verwenden, müssen Sie den folgenden Code (LSApplicationQueriesSchemes) in „Info.plist“ hinzufügen

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

3 . Lösen Sie das Problem, dass Bitcode nicht kompiliert werden kann

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

4. URL-Typen festlegen

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

5. SDK importieren aus der offiziellen WeChat-Demo übertragen werden)

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

6. Systemabhängigkeitsbibliotheken importieren

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

7 bis

WeChat-Zahlungen werden in Einheiten unterteilt. Das heißt, wenn Ihr Zahlungsbetrag auf zwei Dezimalstellen beschränkt ist, muss der Zahlungsbetrag *100 sein, bevor er an die WeChat-Zahlungsplattform gesendet wird, und so weiter die anderen.

2. Code-Entwicklung

1. Am Programmeingang erforderliche Vorgänge (z. B. applegate.m)

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

2 Proxy-Methode, sonst wird der WeChat-Kundendienst nicht zurückgerufen (auch in der Datei „delegate.m“)

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

3. Rückruffunktion für erfolgreiche WeChat-Zahlung

Dies ist zur Erklärung notwendig: Das Ergebnis einer erfolgreichen Zahlung seitens des Kundendienstes kann nicht direkt als Ergebnis einer erfolgreichen Bestellzahlung angesehen werden, sondern muss auf dem vom Server zurückgegebenen Bestellstatus basieren Nachdem die Zahlung auf der Kundendienstseite erfolgreich war, sendet WeChat Pay Die Plattform sendet eine erfolgreiche Zahlungsnachricht an den Server, ändert den Bestellstatus im Hintergrund und sendet ihn an den Kunden zurück. Das Einfache ist, dass bei erfolgreicher Zahlung eine Benachrichtigung an einen bestimmten View-Controller (einen View-Controller mit WeChat-Zahlungsfunktion) gesendet werden muss, damit dieser bestimmte View-Controller den Status der Serverbestellung abfragen kann.

Diese Rückruffunktion muss in Delegate.m geschrieben werden!!!

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

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

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

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)

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

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)

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

Methode eins:

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

Methode zwei:

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

4.3 Der obige Code kann das WeChat-Zahlungsproblem vollständig lösen Der letzte Schritt bleibt bestehen. Die Zahlung ist erfolgreich und kehrt zur App zurück, um die Methode -(void)onResp:(BaseResp*)resp aufzurufen. Hier müssen wir also eine Benachrichtigung an einen bestimmten Ansichtscontroller senden und ihn den Hintergrund anfordern Bestellstatus. Was ich hier erklären möchte, ist, dass Sie, nachdem Sie WeChat Pay über diese Schnittstelle angepasst haben, bei Ihrer Rückkehr immer noch am selben Ort sind. Die Rückrufmethode muss sich lediglich im Delegaten befinden, sodass eine erfolgreiche Benachrichtigung in der Rückrufmethode gesendet werden muss. Anschließend müssen Sie diese Benachrichtigung in der Methode der Ansicht des jeweiligen Ansichtscontrollers abhören, die gerade angezeigt wird, und dann den Status der Hintergrundbestellung anfordern. Hierbei ist zu beachten, dass die Dealloc-Methode neu geschrieben werden muss, um die Benachrichtigung zu entfernen.

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

3. Kompatibilitätsverarbeitung der Proxy-Methoden von Alipay- und WeChat-Zahlungsrückruf-Clients

Detaillierte Erläuterung des Fallcodes für die iOS-WeChat-Zahlungsentwicklung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn