v3 버전은 v2 버전과 하위 레벨이 많이 다릅니다. 인프라를 더 쉽게 확장하고 더 편리하게 사용할 수 있도록 재설계했습니다.
알리페이와 위챗페이를 여러번 개발하다 보니 자연히 혐오감과 게으름이 다시 찾아왔습니다. 관련 휠을 온라인에서 찾아보고 싶었으나 만족스럽다고 생각되는 휠을 찾지 못했거나 이해하기 너무 어려웠습니다. 파일 구조가 너무 지저분해서 팔을 걷어붙이고 직접 해야 하기도 합니다.
웰컴스타, 웰컴PR!
여기로 hyperf 확장 패키지를 보내주세요
laravel 확장 패키지를 여기로 보내주세요.
yii 확장 패키지를 여기로 보내주세요.
다중 테넌트 지원
스울 지원
유연한 플러그인 메커니즘
풍부한 이벤트 시스템
이름이 덜 혼란스럽습니다.
개발자가 주의를 기울일 필요가 없는 세부 정보를 숨깁니다.
Alipay 및 WeChat의 최신 API를 기반으로 개발되었습니다.
매우 추상적인 클래스로 json 및 xml 철자법의 어려움을 제거합니다.
파일 구조가 명확하고 이해하기 쉽습니다. 이 프로젝트에 포함되지 않은 결제 게이트웨이를 원하는 대로 추가할 수 있습니다.
메소드는 사용하기가 더 우아하며 더 이상 이상한 메소드 이름이나 클래스 이름이 무엇인지 공부할 필요가 없습니다.
WeChat 공개 인증서를 자동으로 획득하는 방법이 내장되어 있으므로 더 이상 처음으로 인증서를 획득하는 것에 대해 걱정할 필요가 없습니다.
PSR2, PSR3, PSR4, PSR7, PSR11, PSR14, PSR18 및 기타 표준을 준수하여 프레임워크와 쉽게 통합할 수 있습니다.
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/pay는 Alipay/WeChat/UnionPay의 모든 기능(서비스 제공자 기능 포함)과 100% 호환되며 "플러그인 메커니즘"을 통해 도입될 수 있습니다.
동시에 SDK는 다음 내장 플러그인을 직접 지원합니다. 자세한 내용은 설명서를 참조하세요.
컴퓨터 결제
모바일 홈페이지 결제
앱 결제
카드로 결제
코드를 스캔하여 결제하세요
계좌이체
미니프로그램 결제
...
공식계좌 결제
미니프로그램 결제
H5 결제
코드를 스캔하여 결제하세요
앱 결제
카드로 결제
...
미니프로그램 결제
...
모바일 홈페이지 결제
컴퓨터 웹사이트 결제
카드로 결제
코드를 스캔하여 결제하세요
...
스캔코드 통합결제(WeChat, Alipay, UnionPay, e-finance)
...
작곡가는 yansongda/pay:~3.7.0 -vvv가 필요합니다.
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class AlipayController {protected $config = ['alipay' => ['default' => [// 필수 - Alipay에서 할당한 app_id 'app_id' => '2016082000295641', // 필수 - 애플리케이션 개인 키 문자열 또는 경로 'app_secret_cert' => '89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhD...',// 필수 - 애플리케이션 공개키 인증서 경로 'app_public_cert_path' => '/Users/yansongda/pay/cert/appCertPublicKey_2016082000295641.crt',// 필수 - Alipay 공개키 인증서 경로 'alipay_public_cert_path' => '/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt',// 필수 - Alipay 루트 인증서 경로 'alipay_root_cert_path' => '/Users/yansongda/pay/ cert/ alipayRootCert.crt','return_url' => 'https://yansongda.cn/alipay/return','notify_url' => 'https://yansongda.cn/alipay/notify',// 선택 사항 - 타사 애플리케이션 인증 토큰 'app_auth_token' => '' ,// 선택사항 - 서비스 제공자 모드의 서비스 제공자 ID, 이 매개변수 'service_provider_id' 사용 => 모드가 Pay::MODE_SERVICE인 경우 '',// 선택 사항 - 기본값은 일반 모드입니다. 선택적 옵션은 다음과 같습니다: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE'모드' => 지불::MODE_NORMAL, ], ], 'logger' => [ // 선택사항'enable' => false,'file' => './logs/alipay.log','level' => 'info', // 제작을 권장합니다. 환경 레벨을 info로 조정, 개발 환경은 디버그입니다. 'type' => 'single', // 선택 사항, 선택 사항 daily.'max_file' => 30, // 선택 사항, 유형이 daily인 경우 유효, 기본값은 30일], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // 기타 구성 항목은 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)을 참고하세요. )] , ];공용 함수 웹() { 지불::config($this->config); $result = 지불::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0.01','subject' => '얀송다 테스트-1', ]); $결과를 반환합니다. }공용 함수 returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // 네, 서명 확인은 정말 간단합니다! // 주문번호 : $data->out_trade_no// 알리페이 거래번호 : $data->trade_no// 총 주문금액 : $data->total_amount} public function informCallback() { Pay::config($this->config); try{$data = Pay::alipay()->callback(); // 예, 서명 확인은 매우 간단합니다! // trade_status 및 기타 로직에 대해 스스로 판단하시기 바랍니다. Alipay의 비즈니스 알림에서 Alipay는 거래 알림 상태가 TRADE_SUCCESS 또는 TRADE_FINISHED인 경우에만 구매자의 결제가 성공한 것으로 간주합니다. // 1. 가맹점은 알림 데이터의 out_trade_no가 가맹점 시스템에서 생성된 주문 번호인지 확인해야 합니다. // 2. total_amount가 실제로 실제 주문 금액(즉, 가맹점이 주문할 때의 금액)인지 확인합니다. 주문이 생성되었습니다); // 3, 알림에서 Seller_id(또는 Seller_email)를 확인하세요. out_trade_no 문서의 해당 운영자인지 여부(때때로 판매자가 여러 개의eller_id/seller_email을 가질 수 있음) // 4. app_id가 판매자 자체인지 확인합니다. // 5. 기타 비즈니스 로직 상황} catch (Throwable $e) {dd($e); }return Pay::alipay()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class WechatController {protected $config = ['wechat' => ['default' => [// 필수 - 판매자 번호 'mch_id' => '', // 선택 사항 - v2 판매자 개인 키 'mch_secret_key_v2' => '', // 필수 - v3 판매자 비밀 키 'mch_secret_key' => '', // 필수 - 판매자 개인 키 문자열 또는 경로 'mch_secret_cert' => '',// 필수 - 가맹점 공개키 인증서 경로 'mch_public_cert_path' => '',// 필수 'notify_url' => 'https://yansongda.cn/wechat/notify', // Optional - 공식 계정의 app_id 'mp_app_id' => '',// Optional - 미니 프로그램의 app_id app_id'mini_app_id' => '',// 선택사항 - 앱의 app_id 'app_id' => '',// 선택사항 - 서비스 제공자 모드의 하위 공식 계정의 app_id 'sub_mp_app_id' => '', // Optional - 서비스 프로바이더 모드에서는 서브앱의 app_id 'sub_app_id' => '', // Optional - 서비스 프로바이더 모드에서는 서브앱의 app_id app_id'sub_mini_app_id' => '',// 선택사항 - 서비스 제공자 모드에서는 하위 가맹점 ID'sub_mch_id' => '',// 선택사항 - 위챗 플랫폼 공개키 인증서 경로, 선택사항, php-fpm 모드를 적극 권장합니다. 'wechat_public_cert_path' =>에서 이 매개변수를 구성하세요. ['45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatpay_45F***D57.pem', ], // 선택 사항 - 기본값은 일반 모드입니다. 선택적 옵션은 다음과 같습니다: MODE_NORMAL, MODE_SERVICE'모드' => 지불::MODE_NORMAL, ] ],'logger' => [ // 선택사항'enable' => false,'file' => './logs/wechat.log','level' => 'info', // 제작을 권장합니다. 환경 레벨을 info로 조정, 개발 환경은 디버그입니다. 'type' => 'single', // 선택 사항, 선택 사항 daily.'max_file' => 30, // 선택 사항, 유형이 daily인 경우 유효, 기본값은 30일], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // 기타 구성 항목은 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)을 참고하세요. )] , ];공용 함수 인덱스() { 지불::config($this->config); $order = ['out_trade_no' => 시간().'','description' => '주제-테스트','amount' => [ 'total' => 1, ],'지불자' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxxx', ], ];$pay = 지불::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->package// $ pay->signType}공개 함수 콜백() { Pay::config($this->config); try{$data = Pay::wechat()->callback(); // 네, 서명 확인은 정말 간단합니다! } catch (Throwable $e) {dd($e); } return Pay::wechat()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class DouyinController {protected $config = ['douyin' => ['default' => [// 선택판매자번호 // Douyin 오픈플랫폼 --> 애플리케이션 세부정보 --> 결제정보 --> 제품관리 --> 판매자번호 'mch_id' => '73744242495132490630', // 필수 - 결제 콜백 서명에 사용되는 결제 토큰 // Douyin Open Platform --> 애플리케이션 세부정보 --> 결제 정보 --> 결제 설정 --> 토큰(token) 'mch_secret_token' => 'douyin_mini_token', // 필수 - 결제 SALT, 결제 서명에 사용 // Douyin Open Platform --> 애플리케이션 세부정보 --> 결제 정보 --> 결제 설정 --> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',//필수 - 미니 프로그램 app_id// Douyin Open Platform --> 애플리케이션 세부정보 --> 결제 정보 --> 결제 설정 --> 미니 프로그램 appid 'mini_app_id' => 'tt226e54d3bd581bf801',// 선택사항 - Douyin 오픈 플랫폼 서비스 제공업체 ID 'thirdparty_id' => '', // 선택사항 - Douyin 결제 콜백 주소 'notify_url' => 'https://yansongda.cn/douyin/notify', ], ],'logger' => [ // 선택사항'enable' => false,'file' => './logs/alipay.log','level' => 'info', // 제작을 권장합니다. 환경 레벨을 info로 조정, 개발 환경은 디버그입니다. 'type' => 'single', // 선택 사항, 선택 사항 daily.'max_file' => 30, // 선택 사항, 유형이 daily인 경우 유효, 기본값은 30일], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // 기타 구성 항목은 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)을 참고하세요. )] , ];공용 함수 pay() { 지불::config($this->config); $result = 지불::douyin()->mini(['out_order_no' => date('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'주제' => '옌송다- 테스트 - 주제 - 01','본체' => '옌송다 - 테스트 - 본문 - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); $결과를 반환합니다. }공개 함수 콜백() { Pay::config($this->config); try{$data = Pay::douyin()->callback(); // 네, 서명 확인은 정말 간단합니다! } 잡기 (던지기 가능 $e) {dd($e) }return Pay::douyin()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class JsbController {protected $config = ['jsb' => ['default' => [// 서비스 코드 'svr_code' => '',// 필수 - 파트너 ID 'partner_id' => '',// 필수 - 공개 및 개인키 쌍번호 'public_key_code' => '00', // 필수 - 가맹점 개인키(암호화된 서명) 'mch_secret_cert_path' => '',//필수-가맹점 공개 키 인증서 경로(서명 확인을 위해 장쑤 은행에서 제공)'mch_public_cert_path' => '',//필수-장쑤 은행의 공개 키(장쑤 은행에서 반환한 데이터를 해독하는 데 사용) 'jsb_public_cert_path ' => '', //결제 알림 주소 'notify_url' => '', // 선택 사항 - 기본값은 일반 모드입니다. 선택적 옵션은 다음과 같습니다: MODE_NORMAL: 공식 환경, MODE_SANDBOX: 테스트 환경 '모드' => 지불::MODE_NORMAL, ] ],'logger' => [ // 선택사항'enable' => false,'file' => './logs/epay.log','level' => 'info', // 제작을 권장합니다. 환경 레벨을 info로 조정, 개발 환경은 디버그입니다. 'type' => 'single', // 선택 사항, 선택 사항 daily.'max_file' => 30, // 선택 사항, 유형이 daily인 경우 유효, 기본값은 30일], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // 기타 구성 항목은 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)을 참고하세요. )] , ];공용 함수 인덱스() { 지불::config($this->config); $order = ['outTradeNo' => time().'','proInfo' => 'subject-test','totalFee'=> 1, ];$pay = 지불::jsb()->스캔($order); }공용 함수 informCallback() { Pay::config($this->config);try{$data = Pay::jsb()->callback(); // 네, 서명 확인은 정말 간단합니다! } catch (Throwable $e) {dd($e); } return Pay::jsb()->success(); } }
테스트 및 사용 환경의 제한으로 인해 이 프로젝트에서는 "Alipay", "WeChat Pay", "Douyin Pay", "UnionPay" 및 "Jiangsu Bank"의 관련 결제 게이트웨이만 개발되었습니다.
다른 결제 게이트웨이가 필요하거나 이 프로젝트에서 개선이 필요한 코드를 찾으면 Fork에 PR을 제출하실 수 있습니다!
MIT