211 lines
8.1 KiB
PHP
211 lines
8.1 KiB
PHP
<?php
|
|
|
|
class PayController {
|
|
|
|
const SCAN_PAY_API_URL = 'https://gwapi.yemadai.com/pay/aggregatePay';
|
|
# const SCAN_PAY_API_URL = 'https://gwapi.yemadai.com/pay/scanpay';
|
|
const PRI_KEY = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALaDZP3ysvKxkBLWlW/aAT/YM5/34uQcj2gQVV4q9Vkoscw3MSlmRcr4hckwenGUw0tK2LC4vEume8JBCm0ZsWiGoOwcAJp16Zzr+35hUXYVfgXoYiAG5o8N0nBIYCWO1Tk/e+wJsmkY9eHpA3Iq94EAkogttd6bqk+X4nTUIxfJAgMBAAECgYB3pECC3CMERvOr9bC2RtGE2aRV2/iHElXLoNFlToHQ9YU/2npGqj1cJXgF/9p0NFGlPKY5ipAcg0EjgOFlzW7me9C/wC7x704+WMsqZu7POvOXTlFDRVHYpd6iQqLubjToSMPeIEreSBQYjU8giiVxEZ+7mcFpBShFcXSTJWInBQJBANw5/euICWKnqtmN/PXzdKVC+Y4A2TsYgxWCQaCrjO7YytqCCoaZSJn0+rnTchI0VB2YP0nBxlz+8Jp7DkPjpMsCQQDUKR2Olmh7VB9OQ49KhsgGoNMZvZB69borAPtY8I3eSkyS3t6xTa5S9AEXV4hW1553/KewBAYvnAwS0Gkevbc7AkAzlaXjoLbKFAoR8Y9aMQ+WkkyQNaSskf5KcHtc3jIh1EgXzLQYeRknbtm3405p8zXsxLe2WBxVtiW3mbFqt4znAkEAoeLJmd5s1QYoaRimAtD7WgtnaPG7iAduSZgTMhdDuUVqTnte412J0eQ73Oq+rr0SPy37ahR3/+YLVGPQglNytwJAAcbSZ0EhcRaJUMcrrs2HQoMmQ53Gs5qJsVE5VWUh25Ryqjjo6y7kVYVVaYU1xhguMs7309Y4F4VFiPLZeLIpcw==';
|
|
const PUB_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVd+f/YkGDi8s9AKhZvmHCxZ2+sPKIsr+JVS2Uj4pP6qApuNq5lEwtF4c6LzHJbUUxKge/OttiR7pR481tqW3PgeSYjyU6rayx0rSEo8/xqVHnh4XugbJREUVyq/Evp79f0BePO69zC0AdYZSjXOAVG8uduRzHl4RWb7BiDLBL3QIDAQAB';
|
|
const MER_NO = '49118';
|
|
|
|
protected function getMysql($accountid)
|
|
{
|
|
$mysql_conf = getMysqlConfig(crc32($accountid));
|
|
$conn = new phpcommon\Mysql(array(
|
|
'host' => $mysql_conf['host'],
|
|
'port' => $mysql_conf['port'],
|
|
'user' => $mysql_conf['user'],
|
|
'passwd' => $mysql_conf['passwd'],
|
|
'dbname' => 'paydb'
|
|
));
|
|
return $conn;
|
|
}
|
|
|
|
//ksome201908191405_xxxxx
|
|
private function getOrderId()
|
|
{
|
|
$conn = $this->getMysql($_REQUEST['account_id']);
|
|
$orderid_pre = 'ksome' . strftime('%y%m%d%H%M%S');
|
|
$ret = $conn->execScript("INSERT INTO orderidx(createtime) VALUES(:createtime);",
|
|
array(
|
|
'createtime' => time()
|
|
));
|
|
if (!$ret) {
|
|
die();
|
|
}
|
|
$row = $conn->execQueryOne('SELECT LAST_INSERT_ID();', array());
|
|
if (empty($row)) {
|
|
die();
|
|
}
|
|
$orderid = $orderid_pre . '_' . $row[0];
|
|
return $orderid;
|
|
}
|
|
|
|
private function _redPubkey()
|
|
{
|
|
$pem = "-----BEGIN PUBLIC KEY-----\n" .
|
|
chunk_split(self::PUB_KEY, 64, "\n") .
|
|
"-----END PUBLIC KEY-----\n";
|
|
echo $pem;
|
|
return openssl_pkey_get_public($pem);
|
|
}
|
|
|
|
private function _redPrikey()
|
|
{
|
|
$pem = "-----BEGIN RSA PRIVATE KEY-----\n" .
|
|
chunk_split(self::PRI_KEY, 64, "\n") .
|
|
"-----END RSA PRIVATE KEY-----\n";
|
|
error_log($pem);
|
|
return openssl_pkey_get_private($pem);
|
|
}
|
|
|
|
private function _reaEncode($str) {
|
|
$prikey = $this->_redPrikey();
|
|
return openssl_sign($str, $sign, $prikey, OPENSSL_ALGO_SHA1) ? base64_encode($sign) : false;
|
|
}
|
|
|
|
public function scanPay()
|
|
{
|
|
/*
|
|
if (!phpcommon\isValidSessionId(
|
|
$_REQUET['account_id'],
|
|
$_REQUET['session_id']
|
|
)) {
|
|
echo json_encode(array(
|
|
'errcode' => 100,
|
|
'errmsg' => 'session无效',
|
|
));
|
|
die();
|
|
}
|
|
*/
|
|
$orderid = $this->getOrderId();
|
|
if (empty($orderid)) {
|
|
die();
|
|
}
|
|
$nowtime = time();
|
|
$advice_url = '';
|
|
if (SERVER_ENV != _ONLINE) {
|
|
$advice_url = "https://gamepay-test.kingsome.cn/webapp/index.php?c=PayNotify&a=payNotify";
|
|
} else {
|
|
$advice_url = "https://gamepay.kingsome.cn/webapp/index.php?c=PayNotify&a=payNotify";
|
|
}
|
|
// $advice_url = 'https://gamepay.kingsome.cn/webapp/index.php';
|
|
$params = array(
|
|
'MerchantNo' => self::MER_NO,
|
|
'MerchantOrderNo' => $orderid,
|
|
'PayType' => 'WxJsapi_OffLine',
|
|
'Amount' => '0.1',
|
|
'Subject' => '收银台',
|
|
'Desc' => '互联网支付',
|
|
'CompanyNo' => '',
|
|
'RandomStr' => $orderid,
|
|
'SignInfo' => '',
|
|
'AdviceUrl' => htmlentities($advice_url),
|
|
'SubAppid' => '',
|
|
'UserId' => ''
|
|
);
|
|
$params['SignInfo'] = $this->_reaEncode(
|
|
'AdviceUrl=' . $advice_url . '&' .
|
|
'Amount=' . $params['Amount'] . '&' .
|
|
'MerchantNo=' . $params['MerchantNo'] . '&' .
|
|
'MerchantOrderNo=' . $params['MerchantOrderNo'] . '&' .
|
|
'PayType=' . $params['PayType'] . '&' .
|
|
'RandomStr=' . $params['RandomStr'] .
|
|
''
|
|
);
|
|
echo $params['SignInfo'];
|
|
$xml_txt = phpcommon\objectToXml($params, '<AggregatePayRequest/>');
|
|
$xml_txt = str_replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="utf-8"?>', $xml_txt);
|
|
echo $xml_txt;
|
|
$requestDomain = base64_encode($xml_txt);
|
|
$response = '';
|
|
if (phpcommon\HttpClient::post(self::SCAN_PAY_API_URL,
|
|
'requestDomain='. urlencode($requestDomain),
|
|
$response)
|
|
) {
|
|
/* echo json_encode(array(
|
|
'errcode' => 101,
|
|
'errmsg' => '交易失败:' . $response,
|
|
));
|
|
die();*/
|
|
}
|
|
var_dump($response);
|
|
$xmlobj = new \SimpleXMLElement($response);
|
|
var_dump($xmlobj->respCode);
|
|
if ($xmlobj->respCode == '0000') {
|
|
$conn = $this->getMysql($_REQUEST['account_id']);
|
|
$ret = $conn->execScript();
|
|
}
|
|
}
|
|
|
|
public function scanPay1()
|
|
{
|
|
/*
|
|
if (!phpcommon\isValidSessionId(
|
|
$_REQUET['account_id'],
|
|
$_REQUET['session_id']
|
|
)) {
|
|
echo json_encode(array(
|
|
'errcode' => 100,
|
|
'errmsg' => 'session无效',
|
|
));
|
|
die();
|
|
}
|
|
*/
|
|
$orderid = $this->getOrderId();
|
|
if (empty($orderid)) {
|
|
die();
|
|
}
|
|
$nowtime = time();
|
|
$advice_url = '';
|
|
if (SERVER_ENV != _ONLINE) {
|
|
$advice_url = "https://gamepay-test.kingsome.cn/webapp/index.php?c=PayNotify&a=payNotify";
|
|
} else {
|
|
$advice_url = "https://gamepay.kingsome.cn/webapp/index.php?c=PayNotify&a=payNotify";
|
|
}
|
|
$advice_url = 'https://gamepay.kingsome.cn/webapp/index.php';
|
|
$params = array(
|
|
'MerNo' => self::MER_NO,
|
|
'BillNo' => $orderid,
|
|
'payType' => 'WxJsapi_OffLine',
|
|
'Amount' => '0.1',
|
|
'OrderTime' => strftime('%Y%m%d%H%M%S', $nowtime),
|
|
'AdviceUrl' => htmlentities($advice_url),
|
|
'ScanpayMerchantCode' => '',
|
|
'SignInfo' => '',
|
|
'products' => '',
|
|
'remark' => '',
|
|
'MerName' => '',
|
|
);
|
|
$params['SignInfo'] = $this->_reaEncode(
|
|
'MerNo=' . $params['MerNo'] . '&' .
|
|
'BillNo=' . $params['BillNo'] . '&' .
|
|
'Amount=' . $params['Amount'] . '&' .
|
|
'OrderTime=' . $params['OrderTime'] . '&' .
|
|
'AdviceUrl=' . $advice_url
|
|
);
|
|
echo $params['SignInfo'];
|
|
var_dump(phpcommon\objectToXml($params, '<ScanPayRequest/>'));
|
|
$requestDomain = base64_encode(phpcommon\objectToXml($params, '<ScanPayRequest/>'));
|
|
$response = '';
|
|
if (phpcommon\HttpClient::post(self::SCAN_PAY_API_URL,
|
|
'requestDomain='. urlencode($requestDomain),
|
|
$response)
|
|
) {
|
|
/* echo json_encode(array(
|
|
'errcode' => 101,
|
|
'errmsg' => '交易失败:' . $response,
|
|
));
|
|
die();*/
|
|
}
|
|
var_dump($response);
|
|
$xmlobj = new \SimpleXMLElement($response);
|
|
var_dump($xmlobj->respCode);
|
|
if ($xmlobj->respCode == '0000') {
|
|
$conn = $this->getMysql($_REQUEST['account_id']);
|
|
$ret = $conn->execScript();
|
|
}
|
|
}
|
|
|
|
}
|