이 글은 주로 iOS WeChat 결제 개발 사례를 자세히 소개하고 있으며, 관심 있는 친구들이 참고할 수 있습니다.
WeChat 결제에는 함정이 많고 공식 문서가 제공되지 않습니다. 데모도 "수줍어"하고 이해하기 어렵습니다. 신경쓴 부분이 반영되지 않은 부분도 많고, 우회하는 경우도 많았습니다. 따라서 시스템 개발 과정은 다음과 같다. (전체 데모는 블로그 끝에 첨부되어 있습니다.) 여기에는 WeChat 결제 개발 및 Alipay 개발 호출 클라이언트의 호환성 처리가 포함됩니다. (2개의 서명은 모바일 단말에 위치합니다. 블로그에는 WeChat 클라이언트를 설치하지 않은 상황에 대한 언급이 없습니다. 또한 이 메서드 [WXApi sendReq:request]를 호출할 때 반환 값이 0으로 판단하는 것도 매우 간단합니다.)
1. 환경 구성
1. 먼저 https 프로토콜 액세스, plist에 화이트리스트 설정
2. 위챗 공유, 수집, 결제, 로그인 등을 하려면 "Info.plist"에 다음 코드(LSApplicationQueriesSchemes)를 추가해야 합니다.
3 . 비트코드 컴파일 문제 해결
4. URL 유형 설정
5. WeChat 공식 데모에서)
6. 시스템 종속성 라이브러리 가져오기
7. 🎜>
WeChat 결제는 단위로 구분됩니다. 즉, 결제 금액이 소수점 이하 두 자리까지 유지되는 경우 결제 금액은 *100이 되어야 WeChat 결제 플랫폼으로 전송되며, 그 외의 경우에도 마찬가지입니다. . 2. 코드 개발1. 프로그램 입구(예: applegate.m)에서 필요한 작업 2. 프록시 방식, 그렇지 않으면 WeChat 고객 서비스가 콜백되지 않습니다(delegate.m 파일에도 있음) 3. WeChat 결제 성공을 위한 콜백 기능 설명이 필요합니다. 공식 문서에는 다음과 같이 설명되어 있습니다. 고객 서비스 측의 성공적인 결제 결과는 서버에서 반환된 주문 상태를 기반으로 해야 합니다. , 고객 서비스 측 결제가 성공한 후 WeChat Pay 플랫폼은 결제 성공 메시지를 서버로 보내고 백그라운드에서 주문 상태를 수정한 후 클라이언트에게 반환합니다. 간단한 점은 결제가 성공하면 특정 뷰 컨트롤러(WeChat 결제 기능이 있는 뷰 컨트롤러)에 알림을 보내야 이 특정 뷰 컨트롤이 서버 주문 상태를 요청할 수 있다는 것입니다.이 콜백 함수는 반드시 Delegate.m으로 작성해야 합니다!!!
4. 특정 뷰 컨트롤러용 코드(WeChat 결제 기능이 있는 뷰 컨트롤러)
4.1 선주문 ID를 얻기 위해 선불 주문을 제출합니다. (이 프로세스는 매개변수와 서명 없이 두 번 서명해야 합니다. 매개변수 서명 전달 물론, 이러한 메소드는 payRequsestHandler 클래스에 캡슐화되어 있습니다. 메소드를 호출하려면 매개변수만 전달하면 됩니다.) 이는 결제 버튼을 클릭하기 위한 액션 메소드이기도 합니다
4.2 선불 주문을 받은 후 WeChat 결제의 고객 서비스 측면을 조정할 수 있습니다(4.2 및 4.1 코드가 연속됨)
사인 매개변수 서명이 있는 두 개의 독립 패키지 메소드가 payRequsestHandler에 의해 캡슐화되지 않은 문제로 인해(문제의 스크린샷은 다음과 같습니다) 먼저 코드를 스크린샷으로 찍은 후 직접 복사하여 붙여넣을 수 있는 코드 블록을 제공했습니다.
문제 스크린샷: (많은 사람들이 이 문제를 겪었다고 생각합니다. 제가 거기에 가본 적이 있는데, 100% 서명 문제입니다.)
방법 1:
방법 2:
4.3 위의 코드로 위챗 결제 문제를 완전히 해결할 수 있습니다. 결제가 성공적으로 이루어지고 위임자의 -(void)onResp:(BaseResp*)resp 메서드를 호출하기 위해 앱으로 돌아갑니다. 따라서 여기서는 특정 뷰 컨트롤러에 알림을 보내고 그가 백그라운드 주문 상태를 요청하도록 해야 합니다. 여기서 설명하고 싶은 것은 해당 인터페이스에서 WeChat Pay를 조정한 후에도 다시 돌아올 때 여전히 같은 위치에 있다는 것입니다. 단지 콜백 메서드가 대리자에 있어야 하므로 콜백 메서드에서 성공 알림을 보내야 합니다. 그런 다음 곧 표시될 특정 뷰 컨트롤러의 뷰 메서드에서 이 알림을 수신한 다음 백그라운드 주문 상태를 요청해야 합니다. 여기서 주목해야 할 점은 알림을 제거하려면 dealloc 메서드를 다시 작성해야 한다는 것입니다.
3. Alipay 및 WeChat 결제 콜백 클라이언트의 프록시 방식 호환성 처리
4. 데모
코드 복사 및 붙여넣기(서명 서명)
-(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 加密
위 내용은 iOS WeChat 결제 개발 케이스 코드 상세 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!