if( $pay_type == 1 ){//微信$return_url = 'https://api.abc.cn/api/charge_notify/wx_charge_notify';$config = pay_config(  $pay_type , $return_url );try {$client = new \Payment\Client(\Payment\Client::WECHAT , $config);$pay_res = $client->pay(\Payment\Client::WX_CHANNEL_APP, $payData);} catch (InvalidArgumentException $e) {echo $e->getMessage();exit;} catch (\Payment\Exceptions\GatewayException $e) {echo $e->getMessage();var_dump($e->getRaw());exit;} catch (\Payment\Exceptions\ClassNotFoundException $e) {echo $e->getMessage();exit;} catch (Exception $e) {echo $e->getMessage();exit;}}elseif( $pay_type == 2 ){//支付宝$return_url = 'https://api.abc.cn/api/charge_notify/ali_charge_notify';$config = pay_config($pay_type, $return_url);$payData = [];$payData = ['body'         => '互动传媒','subject'      => '钻石充值','trade_no'     => $order_sn,// 自己实现生成'time_expire'  => time() + 600, // 表示必须 600s 内付款'amount'       => $num, // 微信沙箱模式,需要金额固定为3.01'goods_type'   => 0,'client_ip'    => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1', // 客户地址];try {$client = new \Payment\Client(\Payment\Client::ALIPAY , $config);$pay_res    = $client->pay(\Payment\Client::ALI_CHANNEL_APP, $payData);} catch (InvalidArgumentException $e) {echo $e->getMessage();exit;} catch (\Payment\Exceptions\GatewayException $e) {echo $e->getMessage();var_dump($e->getRaw());exit;} catch (\Payment\Exceptions\ClassNotFoundException $e) {echo $e->getMessage();exit;} catch (Exception $e) {echo $e->getMessage();exit;}}

配置文件

/*** 支付配置信息* @param type $return_url*/
function pay_config(  $type , $return_url ){if( $type == 1 ){//  wx$config = ['use_sandbox' => false, // 是否使用 微信支付仿真测试系统'app_id'       => 'wx74ba3',  // 公众账号ID'sub_appid'    => '',  // 公众子商户账号ID'mch_id'       => '1952', // 商户id'sub_mch_id'   => '', // 子商户id'md5_key'      => '53e5500775', // md5 秘钥'app_cert_pem' => EXTEND_PATH. 'lib/wx_cert/apiclient_cert.pem','app_key_pem' => EXTEND_PATH. 'lib/wx_cert/apiclient_key.pem','sign_type'    => 'MD5', // MD5  HMAC-SHA256'limit_pay'    => [//'no_credit',], // 指定不能使用信用卡支付   不传入,则均可使用'fee_type' => 'CNY', // 货币类型  当前仅支持该字段'notify_url' => $return_url,'redirect_url' => '', // 如果是h5支付,可以设置该值,返回到指定页面];}elseif( $type == 2 ){//ali$config = ['use_sandbox' => false, // 是否使用沙盒模式'app_id'    => '202161','sign_type' => 'RSA2', // RSA  RSA2// 支付宝公钥字符串'ali_public_key' => Ii4KgH7uoH9BKXpEPMrVOAKcXg/OIJAQUZf0E30OiNox239Efz2Blpi0K7Uia7ldP1sZXRSvQIDAQAB',// 自己生成的密钥字符串'rsa_private_key' => 'MIIEowIBAAKCAQEAsJf6wukH5m3pFyX5y1gn0x/Im2l4Ghbg3ik1NYxg2jVtWN573f40uzH7X5R8','limit_pay' => [
//                'balance',// 余额//'moneyFund',// 余额宝
//                'debitCardExpress',//   借记卡快捷//'creditCard',//信用卡//'creditCardExpress',// 信用卡快捷
//                'creditCardCartoon',//信用卡卡通
//                'credit_group',// 信用支付类型(包含信用卡卡通、信用卡快捷、花呗、花呗分期)], // 用户不可用指定渠道支付当有多个渠道时用“,”分隔// 与业务相关参数'notify_url' => $return_url,'return_url' => '',];}return $config;}

回调

ChargeNotify.php<?phpnamespace app\api\controller;use app\common\controller\Api;
use think\Db;
use think\Config;// 自己实现一个类,继承该接口
class WxChargeNotify implements \Payment\Contracts\IPayNotify {/*** 处理自己的业务逻辑,如更新交易状态、保存通知数据等等* @param string $channel 通知的渠道,如:支付宝、微信、招商* @param string $notifyType 通知的类型,如:支付、退款* @param string $notifyWay 通知的方式,如:异步 async,同步 sync* @param array $notifyData 通知的数据* @return bool*/public function handle(string $channel, string $notifyType, string $notifyWay, array $notifyData) {//var_dump($channel, $notifyType, $notifyWay, $notifyData);exit;$data = ["channel" => $channel,"notifyType" => $notifyType,"notifyWay" => $notifyWay,"notifyData" => $notifyData,];file_put_contents("wx_charge_notify2.txt", json_encode($data));$callback = new YuyueNotify();$callback->charge_logic( $notifyData );return true;}
}// 自己实现一个类,继承该接口
class AliChargeNotify implements \Payment\Contracts\IPayNotify {/*** 处理自己的业务逻辑,如更新交易状态、保存通知数据等等* @param string $channel 通知的渠道,如:支付宝、微信、招商* @param string $notifyType 通知的类型,如:支付、退款* @param string $notifyWay 通知的方式,如:异步 async,同步 sync* @param array $notifyData 通知的数据* @return bool*/public function handle(string $channel, string $notifyType, string $notifyWay, array $notifyData) {//var_dump($channel, $notifyType, $notifyWay, $notifyData);exit;$data = ["channel" => $channel,"notifyType" => $notifyType,"notifyWay" => $notifyWay,"notifyData" => $notifyData,];file_put_contents("ali_charge_notify2.txt", json_encode($data));$callback = new YuyueNotify();$callback->charge_logic( $notifyData );return true;}
}/*** 支付回调*/
class ChargeNotify extends Api {protected $noNeedLogin = ['*'];protected $noNeedRight = ['*'];/*** 微信支付回调*/public function wx_charge_notify() {$return_url = 'https://api.abc.cn/api/charge_notify/wx_charge_notify';$config = pay_config(  1 , $return_url );// 实例化继承了接口的类$callback = new WxChargeNotify();file_put_contents("wx_charge_notify1.txt", json_encode($callback));try {$client = new \Payment\Client(\Payment\Client::WECHAT, $config);$xml = $client->notify($callback);$xml = $xml[ "notifyData" ];file_put_contents("wx_charge_notify3.txt", json_encode($xml));} catch (InvalidArgumentException $e) {echo $e->getMessage();exit;} catch (\Payment\Exceptions\GatewayException $e) {echo $e->getMessage();exit;} catch (\Payment\Exceptions\ClassNotFoundException $e) {echo $e->getMessage();exit;} catch (Exception $e) {echo $e->getMessage();exit;}}/*** 微信支付回调*/public function ali_charge_notify() {$return_url = 'https://api.abc.cn/api/charge_notify/ali_charge_notify';$config = pay_config(  2 , $return_url );// 实例化继承了接口的类$callback = new AliChargeNotify();file_put_contents("ali_charge_notify1.txt", json_encode($callback));try {$client = new \Payment\Client(\Payment\Client::ALIPAY, $config);$xml = $client->notify($callback);$xml = $xml[ "notifyData" ];$this->charge_logic( $xml );file_put_contents("ali_charge_notify3.txt", json_encode($xml));} catch (InvalidArgumentException $e) {echo $e->getMessage();exit;} catch (\Payment\Exceptions\GatewayException $e) {echo $e->getMessage();exit;} catch (\Payment\Exceptions\ClassNotFoundException $e) {echo $e->getMessage();exit;} catch (Exception $e) {echo $e->getMessage();exit;}}/*** 充值逻辑* $type 1微信 2支付宝*/public function charge_logic( $xml_arr ) {//  wx   --   aliif ( (isset($xml_arr['return_code']) && $xml_arr['return_code'] == "SUCCESS") || (isset($xml_arr['trade_status']) && $xml_arr['trade_status']=="TRADE_SUCCESS") ) {$pay_type = 0;$pay_str = '';if( isset($xml_arr['return_code']) ){$pay_type = 1;$order_sn = $xml_arr['out_trade_no'];$transaction_id = $xml_arr['transaction_id'];$pay_str .= "微信充值";}elseif( isset($xml_arr['trade_status']) ){$pay_type = 2;$order_sn = $xml_arr['out_trade_no'];$transaction_id = $xml_arr['trade_no'];$pay_str .= "支付宝充值";}//            echo "<pre>";var_dump(   $xml_arr   );die;Db::startTrans();try {Db::commit();echo "success";die;} catch (Exception $e) {Db::rollback();echo "fail";die;}}}}

这是app支付

其他支付自己改参数

巨坑----这个参数不要用

api\vendor\riverslei\payment\src\Gateways\Alipay\AppCharge.php

5.0 riverslei/payment相关推荐

  1. 介绍一个支付组件riverslei/payment及本地如何进行支付宝支付测试

    payment是一款集成了阿里支付.微信支付的组件.它对php的版本要求很低,大于等于5.6. 但是个人认为其文档做的不很完善,特别是异步通知并没有文档,所以有必要将一些细节分享给大家.下面介绍的是l ...

  2. riverslei/payment 支付宝

    登录支付宝设置后台: 把商户公钥填到"应用公钥",生成支付宝公钥. appid,商户私钥,支付宝公钥三个参数 调起支付: //支付宝支付import('lib.Alipay', E ...

  3. 估算带卷积核二分类0,3的网络的收敛时间和迭代次数

    制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...

  4. php微信jsapi支付小结,ThinkPHP接入微信支付 - JSAPI支付

    一.支付准备 二.获取用户openid 首先,到微信公众平台后台 - 设置 - 网页授权域名(别忘了添加开发者) // 在头部引入WechatPubService.php文件,见附录一 use app ...

  5. PHP 从菜鸟到大咖的踩坑之路

    https://cloud.tencent.com/developer/article/1464655 电商Sku设计思维 https://xlswriter-docs.viest.me/zh-cn/ ...

  6. php组件化开发composer,composer组件化开发,个人总结

    组件 只提供单一功能,不和其他功能产生耦合 复用性强,一般放在公共模块,别的模块都可以使用 注意: 1.简单的功能,自己封装一个组件,不要使用第三方.第三方组件的代码冗余,学习成本,掌控程度都没有自己 ...

  7. 微信公众号php空间,php 微信公众号对接一些点

    1.公众号 access_token 和 小程序的 access_token,如果是一个appid,则 通用 2.laravel/lumen 接入微信(包括支付) 目前 使用过两个库 2.1  com ...

  8. 杉德支付php代码实现_php实现小程序支付完整版

    本文实例为大家分享了php实现小程序支付的具体代码,供大家参考,具体内容如下 环境: tp3.2  + 小程序 微信支付功能开通 Step1:下载PHP 支付SDK(下载地址)  放到Library\ ...

  9. Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用

    dpar在同一台电脑上不能run 相同appid,这个在上篇说过,所以就用外部负载均衡nginx来对应,那在不同的host中跑同一服务,看看dapr内部的负载均衡是怎么实现的. 说说现有的服务,两个服 ...

最新文章

  1. 百度程序员哀叹:回老家发现村里很多人开保时捷,道奇等豪车,比程序员有钱多了!...
  2. RadioButton 自定义控件
  3. ES6新特性5:类(Class)和继承(Extends)
  4. 欧姆龙plc解密实例_西门子、施耐德、欧姆龙等13大PLC品牌8000个实例程序资料包...
  5. jeecg自定义datagrid封装列表分页数据显示自定义字段
  6. 中国正在发生或可能发生的变化,将影响未来
  7. Ubuntu下安装vim以及常用命令
  8. javac 与java_javac和参数用法java命令的-d -cp
  9. ISO 22301 业务连续性管理(BCM) 认证培训及标准
  10. python 标准库: csv
  11. 链路追踪Zipkin
  12. 苹果CMS网站awd复现
  13. python导入mysqldb_Python导入MySQLdb库
  14. Pulsar Summit Asia 2020 | 场景案例论坛(上):多行业,多场景
  15. 软件开发的非功能性需求
  16. JL-03-Q9 自动气象站 常见气象9参数 空气温湿度 风速风向 雨量光照 大气压力 土壤温湿度
  17. LLVM中指令的一生
  18. C语言里的和*的简单作用理解
  19. 共享文件夹—— 一个实现Mac与PC互传文件,维护同一个文件夹简单的方法
  20. VMware Workstation 不可恢复错误:(vmui)

热门文章

  1. 自制电吉他效果器 DIY PCB(五)布局与接线
  2. SolidWorks基础教程:用SolidWorks绘制简单零件过程(通孔针管工具)
  3. 中国石化润滑油有限公司:国之重器展现大国风范
  4. 自动release工具
  5. java维吉尼亚密码_维吉尼亚密码java完整版
  6. html colgroup span,html - Span attribute on colgroup and col - Stack Overflow
  7. Android记事本 (附apk和源码)
  8. 【每日一题 6.25】粉刷房子
  9. 如何利用keil C51软件减少代码长度呢?
  10. 短视频行业口播类内容如何模仿制作?