ASP.NET Core 2.0 알 리 페 이 PC 사이트 결제 실현 코드 사용

머리말
최근 에 ASP.NET Core 를 사용 하여 개발 하고 있 습 니 다.마침 알 리 페 이 결제 에 접속 하 는 수요 가 있 었 습 니 다.바 이 두 는 관련 자 료 를 찾 지 못 했 습 니 다.공식 SDK 와 Demo 가 모두.NET Framework 인 것 을 보 았 습 니 다.그래서 공식 SDK 의 소스 코드 에 따라.NET Standard 2.0 으로 알 리 페 이 서버 SDK,Alipay.aopsdk.Core(github:https://github.com/stulzq/Alipay.AopSdk.Core를 실 현 했 습 니 다..NET CORE 2.0 을 지원 합 니 다.사용 편 의 를 위해 Nuget 에 업로드 되 었 습 니 다.바로 사용 할 수 있 습 니 다.
알 리 페 이 는 대면 결제,앱 결제,모 바 일 사이트 결제,컴퓨터 사이트 결제 등 결제 제품 이 비교적 많은 데 이번 에는 컴퓨터 사이트 결 제 를 말한다.

만약 당신 이 글 을 읽 을 시간 이 없다 면,github 에서 데 모 를 가 져 와 서 원래 볼 수 있 습 니 다.매우 간단 합 니 다.github: https://github.com/stulzq/Alipay.Demo.PCPayment
프로젝트 생 성
ASP.NET Core 2.0 MVC 프로젝트 를 새로 만 듭 니 다.

배치 하 다.
제 가 개발 할 때 결제 인 터 페 이 스 를 신청 하지 않 았 기 때문에 알 리 페 이 샌 드 박스 환경 을 사용 하여 개발 한 것 입 니 다.
알 리 페 이 샌 드 박스 환경 소개:개미 샌 드 박스 환경(Beta)은 개발 자 를 도와 인터페이스 기능 개발 과 주요 기능 연 조 를 하 는 보조 환경 이다.샌 드 박스 환경 은 개방 플랫폼 의 일부 제품 의 주요 기능 과 주요 논 리 를 모 의 했다.개발 자가 온라인 심 사 를 응용 하기 전에 개발 자 는 자신의 수요 에 따라 샌 드 박스 환경 에서 각종 개방 인 터 페 이 스 를 파악 하고 조합 하 며 디 버 깅 하여 개발 자 들 이 온라인 심 사 를 완성 한 후에 더욱 빠 르 고온라인 디 버 깅 과 검수 작업 을 더욱 순조롭게 진행 하 다.
계약 이나 애플 리 케 이 션 을 만 들 기 전에 통합 테스트 를 하려 면 샌 드 박스 환경 을 사용 할 수 있다.
샌 드 박스 환경 은 개인 계 정 이나 기업 계 정 으로 로그 인 할 수 있다.
샌 드 박스 환경 주소:https://openhome.alipay.com/platform/appDaily.htm?tab=info
1.키 생 성
알 리 페 이 공식 적 으로 제공 하 는 키 생 성 도 구 를 다운로드 하여 생 성 합 니 다.상세 한 소개:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=105971&docType=1
2.응용 키 설정
우리 가 키 를 생 성 한 후에 알 리 페 이 백 스테이지 에 공개 키 를 설정 해 야 합 니 다.바로 우리 가 생 성 한 공개 키 입 니 다.

설정 후 알 리 페 이 는 우리 에 게 알 리 페 이 공개 키 를 주 고 이 알 리 페 이 공개 키 를 저장 합 니 다.

이 알 리 페 이 공개 키 는 우리 가 만 든 공개 키 와 다 릅 니 다.우리 가 SDK 를 설정 할 때 사용 하 는 공개 키 는 바로 알 리 페 이 공개 키 입 니 다.
3.SDK 설정
새 클래스Config를 만 들 고 설정 을 저장 합 니 다.

public class Config{ 
//   ID,  APPID 
public static string AppId = ""; 
//       
public static string Gatewayurl = ""; 
//     ,      RSA   
public static string PrivateKey = ""; 
//      ,    :https://openhome.alipay.com/platform/keyManage.htm   APPID       。 
public static string AlipayPublicKey = ""; 
 //      
public static string SignType = "RSA2"; 
//      
public static string CharSet = "UTF-8";}
아 이 디 와 알 리 페 이 게 이 트 웨 이 를 모두 알 리 페 이 백 스테이지 에서 볼 수 있 습 니 다.

상점 의 비밀 키 는 바로 우리 자신 이 생 성 한 비밀 키 입 니 다.공개 키 는 바로 알 리 페 이 공개 키 입 니 다.여기 서 반드시 주의해 야 합 니 다.잘못 사용 하지 마 세 요.이곳 의 공개 키 비밀 키 는 문자열 을 직접 작성 하면 됩 니 다.
서명 방식 추천 사용RSA2,RSA 2 사용,알 리 페 이 는 SHA256 withRsa 알고리즘 으로 인터페이스 호출 시 체크(키 길이 제한 없 음).
인 코딩 형식 입 니 다.만약 에 우리 가 직접 설정 한 문자열(공개 키,비밀 키)이 라면 우리 코드 의 인 코딩 입 니 다.만약 에 파일(공개 키,비밀 키)을 사용한다 면 파일 의 인 코딩 입 니 다.
설정 완료:

SDK 추가
공식 SDK 의 소스 코드(.NET Framework)는.NET Standard 2.0 으로 구현 되 는 알 리 페 이 서버 SDK,Alipay.aopsdk.core(github:https://github.com/stulzq/Alipay.AopSdk.Core로.NET Core 2.0 을 지원 합 니 다.
Nuget 을 통한 설치:Install-Package Alipay.AopSdk.Core
지불 하 다.
컨트롤 러 추가PayController

///       /// </summary>/// <param name="tradeno">     ,               </param>/// 
<param name="subject">    </param>/// <param name="totalAmout">    </param>/// 
<param name="itemBody">    </param>/// <returns></returns>[HttpPost]
public void PayRequest(string tradeno,string subject,string totalAmout,string itemBody){ 
DefaultAopClient 
client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0", Config.SignType, Config.AlipayPublicKey, Config.CharSet, false); //       model AlipayTradePagePayModel model = new AlipayTradePagePayModel(); 
model.Body = itemBody; 
model.Subject = subject; 
model.TotalAmount = totalAmout; 
model.OutTradeNo = tradeno; 
model.ProductCode = "FAST_INSTANT_TRADE_PAY"; AlipayTradePagePayRequest 
request = new AlipayTradePagePayRequest(); 
//          
request.SetReturnUrl("http://localhost:5000/Pay/Callback"); 
 //            
request.SetNotifyUrl(""); 
//    model   request 
request.SetBizModel(model); 
var response = client.SdkExecute(request); Console.WriteLine($"        ,   :{tradeno}"); 
//        
Response.Redirect(Config.Gatewayurl + "?" + response.Body);}
실행:
그림 1

그림 2

그림 3

지불 비동기 리 셋 알림
알 리 페 이 동기 리 셋 알림(결제 성공 후 업 체 사이트 로 이동)은 신뢰 할 수 없 기 때문에 여기 서 비동기 통 지 를 사용 하여 결제 결 과 를 얻 어야 합 니 다.비동기 통 지 는 알 리 페 이 가 자발적으로 우리 에 게 제공 한 주 소 를 요청 하 는 것 입 니 다.우 리 는 요청 데이터 에 따라 검사 하고 지불 결 과 를 얻 습 니 다.

/// <summary>///                        post    action              ip/// </summary>public async void Notify(){ 
/*                 。 
 1、             out_trade_no              , 
 2、  total_amount             (           ), 
3、      seller_id(  seller_email)    out_trade_no           (    ,         seller_id/seller_email) 
 4、  app_id        。 */ Dictionary<string, string> sArray = GetRequestPost(); 
if (sArray.Count != 0) 
 { 
bool flag = AlipaySignature.RSACheckV1(sArray, Config.AlipayPublicKey,Config.CharSet, Config.SignType, false); 
if (flag) 
{  
//      
//                      
 //        ,     (out_trade_no)                    ,            
//         total_amount       total_fee      
//       ,            
 //  :  
//            (       ),                
Console.WriteLine(Request.Form["trade_status"]);  
await Response.WriteAsync("success"); 
 } 
else 
{  
await Response.WriteAsync("fail"); 
} 
 }}
동기 반전
동기 반전 즉 지불 성공 적 으로 상점 사이트 로 이전
실행:

/// <summary>///       /// </summary>[HttpGet]public IActionResult Callback(){ /*                 。 
 1、             out_trade_no              , 
2、  total_amount             (           ), 
3、      seller_id(  seller_email)    out_trade_no           (    ,         seller_id/seller_email) 
 4、  app_id        。 */ Dictionary<string, string> sArray = GetRequestGet(); if (sArray.Count != 0) 
{ 
 bool flag = AlipaySignature.RSACheckV1(sArray, Config.AlipayPublicKey, Config.CharSet, Config.SignType, false); 
if (flag) 
{  
Console.WriteLine($"      ,   :{sArray["out_trade_no"]}");  
 ViewData["PayResult"] = "      "; } else 
{  
Console.WriteLine($"      ,   :{sArray["out_trade_no"]}");  
 ViewData["PayResult"] = "      "; 
 } 
} return View();
}
주문 조회
주문 현재 상태 조회:이미 지불,미 지불 등.
실행:

주문 환불

[HttpPost]public JsonResult Query(string tradeno, string alipayTradeNo){ 
 DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0", Config.SignType, Config.AlipayPublicKey, Config.CharSet, false); 
AlipayTradeQueryModel model = new AlipayTradeQueryModel(); 
 model.OutTradeNo = tradeno; 
model.TradeNo = alipayTradeNo; 
 AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); 
request.SetBizModel(model); 
var response = client.Execute(request); 
return Json(response.Body);}
이 주문 금액 을 반송 하 다.
실행:

/// <summary>
///     
/// </summary>/// <param name="tradeno">     </param>/// <param name="alipayTradeNo">      </param>/// <param name="refundAmount">    </param>/// <param name="refundReason">    </param>/// <param name="refundNo">    </param>/// <returns></returns>[HttpPost]public JsonResult Refund(string tradeno,string alipayTradeNo,string refundAmount,string refundReason,string refundNo){ DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0", Config.SignType, Config.AlipayPublicKey, Config.CharSet, false); 
 AlipayTradeRefundModel model = new AlipayTradeRefundModel(); model.OutTradeNo = tradeno; model.TradeNo = alipayTradeNo; 
model.RefundAmount = refundAmount; model.RefundReason = refundReason; model.OutRequestNo = refundNo; AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); 
request.SetBizModel(model); 
 var response = client.Execute(request); return Json(response.Body);}
환불 조회
환불 정보 조회.
실행:

/// <summary>
///     
/// </summary>
/// <param name="tradeno">     </param>
/// <param name="alipayTradeNo">      </param>
/// <param name="refundNo">    </param>
/// <returns></returns>
[HttpPost]
public JsonResult RefundQuery(string tradeno,string alipayTradeNo,string refundNo)
{
 DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",
  Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);
 if (string.IsNullOrEmpty(refundNo))
 {
  refundNo = tradeno;
 }
 AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
 model.OutTradeNo = tradeno;
 model.TradeNo = alipayTradeNo;
 model.OutRequestNo = refundNo;
 AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
 request.SetBizModel(model);
 var response = client.Execute(request);
 return Json(response.Body);
}
주문 종료
일정 시간 이후 지불 하지 않 은 주문 서 를 닫 습 니 다.주문 상 태 는 다음 과 같 습 니 다.지불 대기,이미 지불 한 주문 서 는 닫 을 수 없습니다.
실행:

/// <summary>
///     
/// </summary>
/// <param name="tradeno">     </param>
/// <param name="alipayTradeNo">      </param>
/// <returns></returns>
[HttpPost]
public JsonResult OrderClose(string tradeno, string alipayTradeNo)
{
 DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",
  Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);
 AlipayTradeCloseModel model = new AlipayTradeCloseModel();
 model.OutTradeNo = tradeno;
 model.TradeNo = alipayTradeNo;
 AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();
 request.SetBizModel(model);
 var response = client.Execute(request);
 return Json(response.Body);
}
주소 집합알 리 페 이 API 문서알 리 페 이 모래 상자 환경알 리 페 이 키 생 성 도구알 리 페 이 서버 SDK 소스 코드알 리 페 이 서버 SDK Nuget
가장 중요 한 것:
본문 데모:https://github.com/stulzq/Alipay.Demo.PCPayment

좋은 웹페이지 즐겨찾기