支付宝app支付回调php,php 支付宝新版本app支付以及回调

支付宝2017年新版本支付基本业务逻辑算法

服务端生成字符串 交给客户端,express

客户端调用接口,将这段字符串str传过去 调用起支付界面。json

其中字符串str包含了全部请求参数,以及请求参数和用户本身生成的私钥进行加密处理生成sign服务器

(全部请求参数按照键值顺序排序。而后以rsa2加密手段和用户生成的私钥2048的那种进行加密)app

下面上代码。找到支付宝skd里的 AopClient.php文件 填上以下配置异步

public $appId = "20170925123213213"; //记得是appid 不是之前的pid

//私钥值 2048的那种私钥 用户本身生成的

public $rsaPrivateKey="MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQCCeAyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNHXwZJYxCjy6QVgsw6uyz0IQx0Hq5NAn99jk5OfYVpfnyFOZwqF4xwG9LA9CAK/BYUSc/yGN2I9e/2hxkIcKpwBUmdecCQjW7L0hXXVoOP4d9I5EUNAvlwUYWkxZNlblZ3akir17JCcRyS99HpaU37RP+Tu+RqPk/ZtJh4KlT5uS0Y760bBUvSLMitFcVMJ+Gnt7GbLqRNAoGAO7NL+MUFu64Q+s+g1z9kwq5S1CbI3YbUfSDP1Uq3PJ4cEiwPB93fQew3hyQ9NKs+QkTNah90/n8zlhypIUsrUAsR/uBjbgs39jGGxfFwPWvjHyQiT6z2H9YCcgOHi2yWZchJIbTF0RP6qeJyZV02FOauvyFEcFxBA+NukI1wcCE=";//支付宝公钥(非生成私钥对应的那个公钥,生成的公钥叫应用公钥。上传到支付宝后台后会生成支付公钥)

public $alipayrsaPublicKey="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqx1N29eEAkv+InFjskPXo0CsJEidvm6dTLA13TXWfj8OvoMVag5Cim7byZCbI4JpGBRgNP7OnTeTsYesPx8QBBxxxxxxxxxxxxxfOW8i9RND48p0DxZ1SkGvQwnUQ8eJcy0CePH7SzQIDAQAB";//签名类型

public $signType = "RSA2";

服务端生成字符串str网站

require_once "/core/public/plugin/alipay20171012/AopSdk.php";$c = newAopClient;$request = newAlipayTradeAppPayRequest();/**业务参数**/

//$content['body'] = "Iphone6 16G"; //对一笔交易的具体描述信息。若是是多种商品,请将商品描述字符串累加传给body。非必填参数

$content['subject'] = "给用户充值10000钻石";//商品的标题/交易标题/订单标题/订单关键字等。

$content['out_trade_no'] = $out_trade_no;//商户网站惟一订单号

// $content['timeout_express'] = "30m";//该笔订单容许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的状况下,不管交易什么时候建立,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。注:若为空,则默认为15d。

$content['total_amount'] =number_format($money,2,".","");//订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000],

$content['product_code'] = "QUICK_MSECURITY_PAY";//销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY

// $content['goods_type'] = "0";// 商品主类型:0—虚拟类商品,1—实物类商品注:虚拟类商品不支持使用花呗渠道 非必填参数

$con = json_encode($content);//$content是biz_content的值,将之转化成字符串

/**业务参数**/

/**公共参数**/

$param = array();$param['app_id'] = $c->appId;//支付宝分配给开发者的应用ID

$param['method'] = 'alipay.trade.app.pay';//接口名称

$param['charset'] = 'utf-8';//请求使用的编码格式

$param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型

$param['timestamp'] = date("Y-m-d H:i:s");//发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"

$param['version'] = '1.0';//调用的接口版本,固定为:1.0

$param['notify_url'] = WEBHOST.'/pay/alinotify';//支付宝服务器主动通知地址

$param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式

/**公共参数**/

//生成签名

$paramStr = $c->getSignContent($param);$sign = $c->alonersaSign($paramStr,$c->rsaPrivateKey,'RSA2');$param['sign'] = $sign;$str = $c->getSignContentUrlencode($param);//返回给客户端

异步通知处理ui

异步通知主要就是 验证签名是否合法。编码

代码很简单

require_once dirname(dirname(dirname(__FILE__)))."/core/public/plugin/alipay20171012/AopSdk.php";$c = newAopClient;$result = $c->rsaCheckV1($_POST,$c->alipayrsaPublicKey,$_POST['sign_type']);

这里若是校验成功 $result 返回true 注意必定校验的公钥是支付宝公钥,非本身生成的那个公钥

校验成功后

一、商户须要验证该通知数据中的out_trade_no是否为商户系统中建立的订单号;二、判断total_amount是否确实为该订单的实际金额(即商户订单建立时的金额);三、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据对应的操做方(有的时候,一个商户可能有多个seller_id/seller_email);四、验证app_id是否为该商户自己。上述一、二、三、4有任何一个验证不经过,则代表同步校验结果是无效的,只有所有验证经过后,才能够认定买家付款成功。

这些都简单。没什么好说的。 后面就本身业务处理上的了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值