A versão v3 é muito diferente da versão v2 no nível inferior. A infraestrutura foi redesenhada para facilitar a expansão e ser mais conveniente de usar.
Depois de desenvolver o Alipay e o WeChat Pay muitas vezes, naturalmente desenvolvi um sentimento de nojo e preguiça. Queria procurar rodas relacionadas na Internet, mas nunca encontrei uma que achasse satisfatória ou que fosse muito difícil de entender para usar. Ou a estrutura do arquivo está muito bagunçada e você tem que arregaçar as mangas e fazer isso sozinho.
Bem vinda estrela, bem vindo PR!
Por favor, envie o pacote de extensão hyperf aqui
Por favor, envie o pacote de extensão laravel aqui
Por favor, envie o pacote de expansão do yii aqui
Suporte multilocatário
Suporte para lã
Mecanismo de plug-in flexível
Sistema de eventos rico
Nomear é menos confuso
Oculte detalhes aos quais os desenvolvedores não precisam prestar atenção
Desenvolvido com base nas APIs mais recentes do Alipay e WeChat
Classes altamente abstratas, eliminando a dor de soletrar json e xml
A estrutura do arquivo é clara e fácil de entender. Você pode adicionar gateways de pagamento que não estão incluídos neste projeto como desejar.
Os métodos são usados com mais elegância e não há necessidade de estudar o propósito desses nomes estranhos de métodos ou classes.
Existe um método integrado para obter automaticamente o certificado público WeChat, para que você não precise mais se preocupar em obter o certificado pela primeira vez.
Em conformidade com PSR2, PSR3, PSR4, PSR7, PSR11, PSR14, PSR18 e outros padrões, você pode integrar facilmente à sua estrutura
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/pay é 100% compatível com todas as funções do Alipay/WeChat/UnionPay (incluindo funções de provedor de serviços) e pode ser introduzido através do "mecanismo de plug-in".
Ao mesmo tempo, o SDK oferece suporte direto aos seguintes plug-ins integrados. Consulte a documentação para obter detalhes.
Pagamento por computador
Pagamento de site móvel
Pagamento de APLICATIVO
Pague com cartão
Digitalize o código para pagar
Transferência de conta
Pagamento do miniprograma
...
Pagamento por conta oficial
Pagamento do miniprograma
Pagamento H5
Digitalize o código para pagar
Pagamento de APLICATIVO
Pague com cartão
...
Pagamento do miniprograma
...
Pagamento de site móvel
Pagamento de site de computador
Pague com cartão
Digitalize o código para pagar
...
Pagamento de código de digitalização integrado (WeChat, Alipay, UnionPay, e-finance)
...
compositor requer yansongda/pay:~3.7.0 -vvv
<?phpnamespace AppHttpControllers;use YansongdaPayPay;classe AlipayController {protected $config = ['alipay' => ['default' => [// Obrigatório - app_id atribuído por Alipay 'app_id' => '2016082000295641', // Obrigatório - string de chave privada do aplicativo ou caminho 'app_secret_cert' => '89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhD...',// Obrigatório - Caminho do certificado de chave pública do aplicativo 'app_public_cert_path' => '/Users/yansongda/pay/cert/appCertPublicKey_2016082000295641.crt',// Obrigatório - Caminho do certificado de chave pública Alipay 'alipay_public_cert_path' => '/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt',// Obrigatório - Caminho do certificado raiz 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',// Opcional - token de autorização de aplicativo de terceiros 'app_auth_token' => '' ,// Opcional - ID do provedor de serviços no modo provedor de serviços, use este parâmetro 'service_provider_id' => quando o modo for Pay::MODE_SERVICE '',// Opcional - o padrão é o modo normal. As opções opcionais são: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE'mode' => Pay::MODE_NORMAL, ], ], 'logger' => [ // opcional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // Recomenda-se que a produção o nível do ambiente seja ajustado para informações, o ambiente de desenvolvimento é debug 'type' => 'single', // opcional, opcional diariamente.'max_file' => 30, // opcional, válido quando o tipo é diário, padrão 30 dias], 'http' = > [ // opcional'timeout' => 5.0,'connect_timeout' => 5.0, // Para mais itens de configuração, consulte [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];função pública web() { Pagar::config($this->config); $resultado = Pagar::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0.01','subject' => 'yansongda teste-1', ]); retornar $resultado; }função pública returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // Número do pedido: $data->out_trade_no// Número da transação Alipay: $data->trade_no// Valor total do pedido: $data->total_amount} public function notifyCallback() { Pay::config($this->config); try{$data = Pay::alipay()->callback(); // Por favor, faça seu próprio julgamento sobre trade_status e outras lógicas Na notificação comercial do Alipay, o Alipay considerará o pagamento do comprador bem-sucedido somente quando o status da notificação da transação for TRADE_SUCCESS ou TRADE_FINISHED. // 1. O comerciante precisa verificar se out_trade_no nos dados de notificação é o número do pedido criado no sistema do comerciante // 2. Determine se total_amount é de fato o valor real do pedido (ou seja, o valor quando o comerciante; pedido foi criado); // 3 , Verifique o seller_id (ou seller_email) na notificação Se é o operador correspondente do documento out_trade_no (às vezes, um comerciante pode ter vários seller_id/seller_email // 4. Verifique se o app_id é o próprio comerciante); // 5. Outras situações de lógica de negócios} catch (Throwable $e) {dd($e); }return Pagamento::alipay()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;classe WechatController {protected $config = ['wechat' => ['default' => [// Obrigatório - número do comerciante 'mch_id' => '', // Opcional - chave privada do comerciante v2 'mch_secret_key_v2' => '', // Obrigatório - chave secreta do comerciante v3 'mch_secret_key' => '', // Obrigatório - Chave privada do comerciante String ou caminho 'mch_secret_cert' => '',// Obrigatório - caminho do certificado de chave pública do comerciante 'mch_public_cert_path' => '',// Obrigatório 'notify_url' => 'https://yansongda.cn/wechat/ notify', // Opcional - o app_id da conta oficial 'mp_app_id' => '',// Opcional - o app_id do mini programa app_id'mini_app_id' => '',// Opcional - o app_id do aplicativo 'app_id' => '', // Opcional - o app_id da conta suboficial no modo de provedor de serviços 'sub_mp_app_id' => '', // Opcional - No modo de provedor de serviços, o app_id do subaplicativo 'sub_app_id' => '', // Opcional - No modo de provedor de serviços, o app_id do subaplicativo app_id'sub_mini_app_id' => '',// Opcional - No modo de provedor de serviços, sub-comerciante id'sub_mch_id' => '',// Opcional - Caminho do certificado de chave pública da plataforma WeChat, opcional, modo php-fpm é altamente recomendado Configure este parâmetro em 'wechat_public_cert_path' => ['45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatpay_45F***D57.pem', ], // Opcional - o padrão é o modo normal. As opções opcionais são: MODE_NORMAL, MODE_SERVICE'mode' => Pay::MODE_NORMAL, ] ],'logger' => [ // opcional'enable' => false,'file' => './logs/wechat.log','level' => 'info', // Recomenda-se que a produção o nível do ambiente seja ajustado para informações, o ambiente de desenvolvimento é debug 'type' => 'single', // opcional, opcional diariamente.'max_file' => 30, // opcional, válido quando o tipo é diário, padrão 30 dias], 'http' = > [ // opcional'timeout' => 5.0,'connect_timeout' => 5.0, // Para mais itens de configuração, consulte [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];índice de função pública() { Pagamento::config($this->config); $order = ['out_trade_no' => time().'','description' => 'subject-test','amount' => [ 'total' => 1, ],'pagador' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxxx', ], ];$pay = Pay::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->package// $ pay->signType}retorno de chamada de função pública() { Pay::config($this->config); try{$data = Pay::wechat()->callback(); } catch (arremessável $e) {dd($e); } return Pay::wechat()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;classe DouyinController {protected $config = ['douyin' => ['default' => [// Número do comerciante opcional // Douyin Open Platform --> Detalhes do aplicativo --> Informações de pagamento --> Gerenciamento de produtos --> Comerciante No. 'mch_id' => '73744242495132490630', // Obrigatório - Token de pagamento, usado para assinatura de retorno de chamada de pagamento // Douyin Open Platform --> Detalhes do aplicativo --> Informações de pagamento --> Configurações de pagamento --> Token (token) 'mch_secret_token' => 'douyin_mini_token', // Obrigatório - Pagamento SALT, usado para assinatura de pagamento // Douyin Open Platform --> Detalhes do aplicativo --> Informações de pagamento -> Configurações de pagamento -> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA', // Obrigatório - Mini programa app_id // Douyin Open Platform --> Detalhes do aplicativo --> Informações de pagamento --> Configurações de pagamento --> Mini programa appid 'mini_app_id' => 'tt226e54d3bd581bf801', // Opcional - ID do provedor de serviços de plataforma aberta Douyin 'thirdparty_id' => '', // Opcional - endereço de retorno de chamada de pagamento Douyin 'notify_url' => 'https://yansongda.cn/douyin/notify', ], ],'logger' => [ // opcional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // Recomenda-se que a produção o nível do ambiente seja ajustado para informações, o ambiente de desenvolvimento é debug 'type' => 'single', // opcional, opcional diariamente.'max_file' => 30, // opcional, válido quando o tipo é diário, padrão 30 dias], 'http' = > [ // opcional'timeout' => 5.0,'connect_timeout' => 5.0, // Para mais itens de configuração, consulte [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ]; função pública pagar() { Pagar::config($this->config); $resultado = Pagar::douyin()->mini(['out_order_no' => data('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'assunto' => 'Yan Songda- teste - assunto - 01','corpo' => 'Yan Songda - teste - corpo - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); retornar $resultado; }retorno de chamada de função pública() { Pay::config($this->config); try{$data = Pay::douyin()->callback(); } catch (lançavel $e) {dd($e) }return Pagamento::douyin()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;classe JsbController {protected $config = ['jsb' => ['default' => [// Código de serviço 'svr_code' => '',// Obrigatório - ID do parceiro 'partner_id' => '',// Obrigatório -Público e número do par de chaves privadas 'public_key_code' => '00', // Obrigatório - Chave privada do comerciante (assinatura criptografada) 'mch_secret_cert_path' => '',//caminho do certificado de chave pública do comerciante obrigatório (fornecido pelo Banco de Jiangsu para verificação de assinatura)'mch_public_cert_path' => '',//chave pública obrigatória do Banco de Jiangsu (usada para descriptografar os dados retornados pelo Banco de Jiangsu Jiangsu) 'jsb_public_cert_path' => '', //Endereço de notificação de pagamento 'notify_url' => '', // Opcional - o padrão é o modo normal. As opções opcionais são: MODE_NORMAL: ambiente oficial, MODE_SANDBOX: ambiente de teste 'mode' => Pay::MODE_NORMAL, ] ],'logger' => [ // opcional'enable' => false,'file' => './logs/epay.log','level' => 'info', // Recomenda-se que a produção o nível do ambiente seja ajustado para informações, o ambiente de desenvolvimento é debug 'type' => 'single', // opcional, opcional diariamente.'max_file' => 30, // opcional, válido quando o tipo é diário, padrão 30 dias], 'http' = > [ // opcional'timeout' => 5.0,'connect_timeout' => 5.0, // Para mais itens de configuração, consulte [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];índice de função pública() { Pay::config($this->config); $order = ['outTradeNo' => time().'','proInfo' => 'subject-test','totalFee'=> 1, ];$pay = Pagar::jsb()->scan($order); }função pública notifyCallback() { Pay::config($this->config);try{$data = Pay::jsb()->callback(); // Sim, a verificação de assinatura é simples assim! } catch (arremessável $e) {dd($e); } return Pay::jsb()->success(); } }
Devido às limitações do ambiente de teste e uso, apenas os gateways de pagamento relevantes de "Alipay", "WeChat Pay", "Douyin Pay", "UnionPay" e "Jiangsu Bank" foram desenvolvidos neste projeto.
Se você precisar de outros gateways de pagamento ou encontrar um código que precise de melhorias neste projeto, seja bem-vindo ao Fork e envie um PR!
MIT