ASP.NET Core 2.0 알 리 페 이 결제 실현 코드
14805 단어 asp.netcore2.0알 리 페 이스 캔 페 이 먼 트
마이크로소프트 가 CEO 를 바 꾼 후부 터 마이크로소프트 의 전략 방향 은 상당히 큰 변화 가 생 겼 다.더 이상 폐쇄 적 이지 않 고 많은 것 을 개 원 했 으 며 오픈 소스 커 뮤 니 티,.NET 은 크로스 플랫폼 을 실현 하고 xamarin 을 인수 하여 개발 자 에 게 무료 로 제공 하 는 등 이다.저 는.net 을 매우 좋아 합 니 다.그리고.net core 가 굴기 하 기 를 바 랍 니 다.저 는.net core 1.1 때 부터 사 용 했 습 니 다.지금까지.net core 2.0...net core 2.0 은 1.1 보다 약간 바 뀌 었 고 api 도 많이 증가 하여 사용 하기에 더욱 편리 해 졌 습 니 다.최근 에 asp.net core 도 킹 알 리 페 이 를 만 들 고 있 습 니 다.바 이 두 는 core 에 관 한 알 리 페 이 결제 관련 자 료 를 찾 지 못 해서 자체 적 으로 연 구 했 습 니 다.공식 서버 sdk 를.net standard 2.0https://github.com/stulzq/Alipay.AopSdk.Core으로 바 꾸 었 습 니 다.또한 공식 데모 에 따 르 면 asp.net core 2.0 의 PC 사이트 결제 데 모 를 성공 적 으로 만 들 었 다.앞 에는 ASP.NET Core 2.0 이 알 리 페 이 PC 사이트 로 결제 하 는 것 을 소개 했다.오늘 은 알 리 페 이 가 직접 지불 하 는 스 캔 결제 입 니 다.
스 캔 결제 안내
스 캔 결 제 는 알 리 페 이 가 직접 지불 하 는 중의 한 지불 방식 으로 직접 지불 하 는 것 은 바코드 지불,스 캔 지불,음파 지불 을 포함한다.
스 캔 결 제 는 사용자 가 알 리 페 이 지갑 의'스 캔'기능 을 열 고 스 캔 업 체 가 특정한 수금 장면 에서 QR 코드 를 보 여 주 며 결제 하 는 모델 을 말한다.이 모델 은 오프라인 매장 결제,대면 결제 등 장면 에 적용 된다.
사용 예시:
1.모 생방송 플랫폼 충전
2.모 동 영상 사이트 에서 VIP 개통
스 캔 결 제 는 전통 적 인 웹 페이지 결제 보다 편리 하고 빠르다.
업무 절차:
사용 절차:
배치 하 다.
ASP.NET Core 2.0 MVC 프로젝트 만 들 기
새 설정 클래스 Config
public class Config
{
// ID, APPID
public static string AppId = "";
/// <summary>
/// uid
/// </summary>
public static string Uid = "";
//
public static string Gatewayurl = "https://openapi.alipaydev.com/gateway.do";
// , 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";
}
다음 프레젠테이션 은 모두 사용 하 는 알 리 페 이 샌 드 박스 환경 으로 알 리 페 이 샌 드 박스 환경 은 개발 자 를 도와 인터페이스 기능 개발 과 주요 기능 연결 을 하 는 보조 환경 을 말한다.샌 드 박스 환경 은 개방 플랫폼 의 일부 제품 의 주요 기능 과 주요 논 리 를 모 의 했다.개발 자가 온라인 심 사 를 응용 하기 전에 개발 자 는 자신의 수요 에 따라 샌 드 박스 환경 에서 각종 개방 인 터 페 이 스 를 파악 하고 조합 하 며 디 버 깅 하여 개발 자 들 이 온라인 심 사 를 완성 한 후에 더욱 빠 르 고온라인 디 버 깅 과 검수 작업 을 더욱 순조롭게 진행 하 다.계약 이나 애플 리 케 이 션 을 만 들 기 전에 통합 테스트 를 하려 면 샌 드 박스 환경 을 사용 할 수 있다.
설정 에 대한 상세 한 설명 은 제 전 글 을 보십시오.ASP.NET Core 2.0 알 리 페 이 PC 사이트 로 결제
ASP.NET Core 2.0 스 캔 결제 실현
QR 코드 를 만 드 는 구성 요 소 는 QRcoder 라 고 합 니 다.이 구성 요 소 는 제3자 가 실현 하 는 System.Drawing 라 이브 러 리 를 참조 하여 직접 SDK 를 Alipay.aopsdk.F2FPay 로 github 과 nuget 으로 업데이트 되 었 습 니 다.Nuget: https://www.nuget.org/packages/Alipay.AopSdk.F2FPay/ ,github: https://github.com/stulzq/Alipay.AopSdk.Core
새 컨트롤 러 FTFPayController
1.QR 코드 생 성 액 션
/// <summary>
///
/// </summary>
/// <param name="orderName"> </param>
/// <param name="orderAmount"> </param>
/// <param name="outTradeNo"> </param>
/// <returns></returns>
[HttpGet]
public IActionResult ScanCodeGen(string orderName, string orderAmount, string outTradeNo)
{
AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderName,orderAmount,outTradeNo);
// , 。
// , , 。
AlipayF2FPrecreateResult precreateResult = _serviceClient.tradePrecreate(builder);
//string notify_url = "http://10.5.21.14/Pay/Notify"; //
//AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url);
// 。
//payResponse.QrCode
// , 。
var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "images/error.png"));
switch (precreateResult.Status)
{
case ResultEnum.SUCCESS:
bitmap.Dispose();
bitmap=RenderQrCode(precreateResult.response.QrCode);
//
// ,
ParameterizedThreadStart parStart = new ParameterizedThreadStart(LoopQuery);
Thread myThread = new Thread(parStart);
object o = precreateResult.response.OutTradeNo;
myThread.Start(o);
break;
case ResultEnum.FAILED:
Console.WriteLine(" :"+ precreateResult.response.Body);
break;
case ResultEnum.UNKNOWN:
Console.WriteLine(" :" + (precreateResult.response == null ? " , " : " , "));
break;
}
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Png);
byte[] bytes = ms.GetBuffer();
return File(bytes, "image/png");
}
2.구조 결제 요청 데이터
/// <summary>
///
/// </summary>
/// <param name="orderName"> </param>
/// <param name="orderAmount"> </param>
/// <param name="outTradeNo"> </param>
/// <returns> </returns>
private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string orderName,string orderAmount,string outTradeNo)
{
// , 。
if (string.IsNullOrEmpty(outTradeNo))
{
outTradeNo = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
}
AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();
//
builder.seller_id = Config.Uid;
//
builder.out_trade_no = outTradeNo;
//
builder.total_amount = orderAmount;
//
//builder.discountable_amount = "";
//
//builder.undiscountable_amount = "";
//
builder.subject = orderName;
//
builder.timeout_express = "5m";
//
builder.body = "";
// , ,
builder.store_id = "test store id";
// , ,
builder.operator_id = "test";
//
List<GoodsInfo> gList = new List<GoodsInfo>();
GoodsInfo goods = new GoodsInfo();
goods.goods_id = "goods id";
goods.goods_name = "goods name";
goods.price = "0.01";
goods.quantity = "1";
gList.Add(goods);
builder.goods_detail = gList;
//
//ExtendParams exParam = new ExtendParams();
//exParam.sysServiceProviderId = "20880000000000";
//builder.extendParams = exParam;
return builder;
}
3.렌 더 링 QR 코드
/// <summary>
///
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private Bitmap RenderQrCode(string str)
{
QRCodeGenerator.ECCLevel eccLevel = QRCodeGenerator.ECCLevel.L;
using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
{
using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, eccLevel))
{
using (QRCode qrCode = new QRCode(qrCodeData))
{
Bitmap bp= qrCode.GetGraphic(20, Color.Black, Color.White,
new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "images/alipay.png")), 15);
return bp;
}
}
}
}
4.폴 링 결제 결과
/// <summary>
///
/// </summary>
/// <param name="o"> </param>
public void LoopQuery(object o)
{
AlipayF2FQueryResult queryResult = new AlipayF2FQueryResult();
int count = 100;
int interval = 10000;
string outTradeNo = o.ToString();
for (int i = 1; i <= count; i++)
{
Thread.Sleep(interval);
queryResult = _serviceClient.tradeQuery(outTradeNo);
if (queryResult?.Status == ResultEnum.SUCCESS)
{
DoSuccessProcess(queryResult);
return;
}
}
DoFailedProcess(queryResult);
}
/// <summary>
///
/// </summary>
private void DoSuccessProcess(AlipayF2FQueryResult queryResult)
{
// ,
Console.WriteLine(" : " + queryResult.response.OutTradeNo);
}
/// <summary>
///
/// </summary>
private void DoFailedProcess(AlipayF2FQueryResult queryResult)
{
// ,
Console.WriteLine(" : " + queryResult.response.OutTradeNo);
}
상기 코드 는 프 리 젠 테 이 션 일 뿐 실제 적 으로 사용 할 때 자신의 수요 에 따라 수정 하 십시오.예 를 들 어 폴 링 은 모든 주문 에 하나의 스 레 드 를 여 는 것 이 아니 라 하나의 백 스테이지 작업 스 레 드 로 문의 해 야 합 니 다.주의 하 십시오.데모 데모
1.QR 코드 생 성
QR 코드 를 생 성 하려 면 반드시 업 체 의 주문 번호,주문 금액,주문 명칭 세 개의 인 자 를 제공 해 야 한다.그렇지 않 으 면 오류 가 발생 할 수 있다.
2.스 캔 결제
핸드폰 알 리 페 이 를 켜 고 스 캔 을 눌 러 QR 코드 를 스 캔 하여 지불 을 완성 합 니 다.
샌 드 박스 환경 을 사용한다 면 샌 드 박스 버 전 알 리 페 이 를 다운로드 해 야 합 니 다.정식 버 전 알 리 페 이 를 사용 하여 샌 드 박스 환경 api 에서 생 성 된 QR 코드 를 스 캔 하면 QR 코드 가 효력 을 잃 고 샌 드 박스 환경 배경 에서 다운로드 할 수 있 습 니 다.샌 드 박스 환경 은 반드시 샌 드 박스 환경 계 정 을 사용 해 야 한다.
(1)스 캔 후:
(2)지불 성공:
3.지급 결과
폴 링 을 통 해 얻 은 결과:
주소 집합
앞의 글:ASP.NET Core 2.0 알 리 페 이 PC 사이트 로 결제
직접 지불 공식 문서:https://docs.open.alipay.com/194
Nuget 구성 요소:
QRcoder(2 차원 코드 생 성):https://www.nuget.org/packages/QRCoder/
Alipay.aopsdk.F2FPay(직접 SDK 지불):https://www.nuget.org/packages/Alipay.AopSdk.F2FPay/
알 리 페 이 가 서비스 측 SDK 에 직접 지불:https://github.com/stulzq/Alipay.AopSdk.Core
본문 데모:https://github.com/stulzq/Alipay.Demo.PCPayment
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 ASP.NET Core 2.0 알 리 페 이 결제 의 실현 코드 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.