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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.