www.lightcourse.com/plugins/payments/alipay_h5/alipay_h5.php

106 lines
5.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
class alipay_h5 {
//配置
private $config = array();
public function __construct($payment_info = array()) {
if (!empty($payment_info)) {
$this->config = array(
//应用ID,您的APPID。
'app_id' => $payment_info['payment_config']['alipay_appid'],
//商户私钥
'merchant_private_key' => $payment_info['payment_config']['private_key'],
//异步通知地址
'notify_url' => str_replace('/index.php', '', HOME_SITE_URL) . '/payment/alipay_h5_notify.html',
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type' => "RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'app_cert_path' => $payment_info['payment_config']['app_cert_path'],
'alipay_cert_path' => $payment_info['payment_config']['alipay_cert_path'],
'root_cert_path' => $payment_info['payment_config']['root_cert_path'],
);
}
}
public function get_payform($order_info) {
require_once PLUGINS_PATH . '/payments/alipay/aop/AopCertClient.php';
require_once PLUGINS_PATH . '/payments/alipay/aop/request/AlipayTradeWapPayRequest.php';
$aop = new AopCertClient ();
$appCertPath = $this->config['app_cert_path'];
$alipayCertPath = $this->config['alipay_cert_path'];
$rootCertPath = $this->config['root_cert_path'];
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $this->config['app_id'];
$aop->rsaPrivateKey = $this->config['merchant_private_key'];
$aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
$aop->isCheckAlipayPublicCert = true; //是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
$aop->appCertSN = $aop->getCertSN($appCertPath); //调用getCertSN获取证书序列号
$aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath); //调用getRootCertSN获取支付宝根证书序列号
$request = new AlipayTradeWapPayRequest ();
$request->setNotifyUrl($this->config['notify_url']);
//不同订单支付成功对应的跳转界面
if($order_info['order_type'] == 'real_order'){
$url = config('ds_config.h5_site_url').'/member/order_list';
}elseif ($order_info['order_type'] == 'vr_order') {
$url = config('ds_config.h5_site_url').'/member/vrorder_list';
} elseif ($order_info['order_type'] == 'pd_order') {
$url = config('ds_config.h5_site_url').'/member/recharge_list';
}
if(input('param.uniapp')){
$url = preg_replace('/^(http|https):\/\//','dsmall://',$url);
}
$request->setReturnUrl($url);
$request->setBizContent("{" .
"\"total_amount\":" . round($order_info['api_pay_amount'],2) . "," .
"\"subject\":\"" . $order_info['subject'] . "\"," .
"\"body\":\"" . $order_info['order_type'] . "\"," .
"\"out_trade_no\":\"" . $order_info['order_type'] . '-' . $order_info['pay_sn'] . "\"," .
"\"timeout_express\":\"1m\"," .
"\"product_code\":\"QUICK_WAP_WAY\"" .
" }");
$result = $aop->pageExecute($request);
echo $result;exit;
}
/**
* 获取return信息
*/
public function verify_return() {
require_once PLUGINS_PATH . '/payments/alipay/aop/AopCertClient.php';
$arr = $_GET;
$aop = new AopCertClient ();
$appCertPath = $this->config['app_cert_path'];
$alipayCertPath = $this->config['alipay_cert_path'];
$rootCertPath = $this->config['root_cert_path'];
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $this->config['app_id'];
$aop->rsaPrivateKey = $this->config['merchant_private_key'];
$aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
$aop->isCheckAlipayPublicCert = true; //是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
$aop->appCertSN = $aop->getCertSN($appCertPath); //调用getCertSN获取证书序列号
$aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath); //调用getRootCertSN获取支付宝根证书序列号
$result = $aop->rsaCheckV1($arr, $aop->alipayrsaPublicKey, $aop->signType);
if ($result) {
return true;
}
return false;
}
}