支付宝进行app支付
准备工作
支付宝支付的官方服务端demo
项目背景,多个商家在同一个平台支付,根据商家号去查询商家的appid(支付宝分配给开发者的应用ID)
支付宝的应用公钥和私钥以及通过应用公钥生成的支付宝公钥可以多个商家公用一个(方便,给个赞)
商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
支付宝审核效率较快
- 首先说一下服务商版,可以到这里看看介绍 https://pay.weixin.qq.com/service_provider/index.shtml
服务商版的微信支付开发文档在这里 https://pay.weixin.qq.com/wiki/doc/api/sl.html
这里主要说一下从原来的普通的账号转变为接入服务商要做哪些改变
这是第一个注意的地方
以刷卡支付为例,可以对比看到,多了两个参数sub_appid,sub_mch_id,这两个参数填你原来账号的。
而appid,mch_id填服务商的,服务商会给你的
如果是微信公众账号内h5支付
要求传openid和sub_openid,这里只传sub_openid即可,内容填以前获取的openid,不变
另外,再提醒下,微信app支付比较特殊,它的appid和其它的支付使用的appid是不相同的
微信app支付的appid去open.weixin.qq.com查看
而其它的支付的appid去mp.weixin.qq.com查看
加密(重点)
加密使用商户给的key,自己以前的key已经无效了。
支付目录
开通商户后,商户会叫你提供appid和支付目录,这时自己设置的支付目录已经无效。
注意区分正式目录和测试目录,若使用测试目录,必须要把个人微信号填入白名单切必须要在微信公众账号里打开支付链接。
话不多说,开始
支付宝支付请求
支付宝支付都是json格式
起调
- 支付宝支付起调
1 | public function alipay_app(){ |
回调
- 支付宝支付回调
1 | public function notifyPay(){ |
退款
- 支付宝支付退款
public function refund($param){
$parameter = $result = [];
try {
$aop = new AopClient();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $this->app_id;
$aop->rsaPrivateKey = $this->rsaPrivateKey;
$aop->alipayrsaPublicKey = $this->alipayrsaPublicKey;
$aop->apiVersion = '1.0';
$aop->signType = 'RSA';
$aop->postCharset='UTF-8';
$aop->format='json';
$parameter = [
"trade_no" => $param['trade_no'],
"out_trade_no" => $param['out_trade_no'],
"out_request_no" => $param['out_request_no'],
"refund_reason" => '正常退款',
"refund_amount"=>$param['refund_money'],
];
$request = new request\AlipayTradeRefundRequest ();
$request->setBizContent(json_encode($parameter));
$result = $aop->execute ($request);
$responseNode = 'alipay_trade_refund_response';//str_replace(".", "_", $request->getApiMethodName()) . "_response";
$data = $result->$responseNode;
$resultCode = $data->code;
if(empty($resultCode) || $resultCode != 10000){
$m = $data->sub_msg?$data->sub_msg:$data->msg;
throw new \Exception($m, 1);
}
$ret['status'] = 'success';
$ret['msg'] = '退款成功';
$ret['data'] = $data;
} catch (\Exception $e) {
$ret['status'] = 'fail';
$ret['msg'] = $e->getMessage();
}
writeLog("| 支付宝退款 | {$ret['status']}-{$ret['msg']} | 参数:".json_encode($parameter)." | 结果:".json_encode($result), config('PAY_LOG'),'refund');
return $ret;
}
支付宝支付相对比较简单,有什么问题可以联系我喔!