diff --git a/mobile/plugins/payment/dalianpay/cert/channel_public_key.pem b/mobile/plugins/payment/dalianpay/cert/channel_public_key.pem new file mode 100644 index 0000000..350d007 --- /dev/null +++ b/mobile/plugins/payment/dalianpay/cert/channel_public_key.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFoZG+UeND0T/PQK41Dg +5bXgpuHwBdc7sfGRTKlB2PmZ1Q8XE4b8u5SMqk9LC7iUL5wJlItJ9rcdXPgc3SnB +xuq133HRqvsNAxWacYQnarYMko7JKKGENdrcE+MY7ZM6Yo60/6+HVOwphIw8BuZL +NvvCKx7BrI84t93TFndn6WVF16XgOhQkPyUmsj2ekfw9vrQg89ipNcTHmBCtH9/K +KEWRPTUkH9xc+GOZ06v5O3Pmpd+hdXyE/Rjtsa1foR3l1UsWFVODHRkeoHTnBdkR +YiOGXpGthazAcvPAZtTWSKtRirKF87soIill1cmHMCw8d9JoZgq9k0L8n9ZpUCw7 +twIDAQAB +-----END PUBLIC KEY----- diff --git a/mobile/plugins/payment/dalianpay/cert/cus_private_key.pem b/mobile/plugins/payment/dalianpay/cert/cus_private_key.pem new file mode 100644 index 0000000..5ec197a --- /dev/null +++ b/mobile/plugins/payment/dalianpay/cert/cus_private_key.pem @@ -0,0 +1,28 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCOt2qd98v3uMVM +XtDlEJBks8spkC+SSdi+/9m+6cVE/eqSqzWMAa2QeoZ7j31ard+FV2ZynITj+Y15 +6iRJ84J20k7VTuUfjLSjJ079DrRweYimf5MW/QCRyz93YMjC4A9aWrbSw06pkiz4 +p3DMkitlp9oDEx13vJld0tLw1BO4fSMmoDLg4ri3zFA/PqPb3OWW0R/yRakOdiPx +kjsOYZ7EOesdc67gdYCiiEy2x38jGMKAJ5jqWmRbnCF+4Ij7QPGXQTG7ba63azNN +S8mBis5WNHA1EPK+KgRDykZHWTzV8Hu/x5NRnBUYpTdSlLM2zP//8dAcUOUejakv +DSWbLPDVAgMBAAECggEAVm5KSYTqqAnkow3BIRjY+cPRREioJsZGV9YG/xIAgHnu +eAjsEvBpNtidXXNXDXXDqrN1ve+Ao7hcr/rXI1owJtnTGGgBZwwF0dFaivM+3+ca +lQsp/4AVujYHJ7sbmrmrUqMhmZ7iott+FNEDBUF4usXeyIHpFLzJfQLS8Tre/pkS +KVcepRBKD7WSwSaqI5Gb9i+HHdqgE1UhY4nqMt1F07szFmPSCsS8L5DVGRTKbOlW +KwwbgyY53aUCb1xVVHXhyxCFTU8a02yBwWDXCeG+Qvnu2qED+wui7yF77299ypPP +oim72rjyxj1736+PSymgPlNuLFPkH/HLac5jxdR7eQKBgQDQq6nORGAJpPmt+BLY +nJtJHCJiU4cf4dJ1O+LnUTvlO1dl68wh/fulOG6xwngTXB9izq9Aj6CEGsW7GCne +3Q1vBELlmDcqp1AiyvpHaymtYWRr6+DdW0DKWTfcqaaF+8GEx6RwXBuwUji7kh5y +wCCP3ZLZG9zx7DTL9F0+2h7TwwKBgQCvFiqtPK72VT9C9+Q+Ct8Bwhzv0WDbTwx6 +Ke5YXWuI8mm07TA/osVav4etLrwlKine6QqZ9+1GnYtB09EKX1nmFBgiOgR52woe +hOhOYTG4bFRfH7caiHcgR3L0nsXCdjlfpxqLiUCvFYzwYsXnIGfQYZvWLELFua5o +dhRyTfxXhwKBgHxEzwJE3ADCW+ML6oVPdnbqp1txLPaCsKgaev2Q9h+E4H6VF2Ni +8xso6Vs5WfMFmLdqKRpErq4dl4XdVQohEN/9ZK2AodHoBCRERxqDKjXT208eETMi +JgqbaVYjPkVqcYvWrQoxAFhYDus9kJ575qhmpw5etozoQ2T26RUGJverAoGANKwy +gpNy/2B9+6Of4ppapKjFE9ClltSdKFNdBPB13WkwK+H/VeWeAcMFCjC5IWUh25G4 +QsG3fDsBHfifNsOgw/rfl8xkdFRVIwFQ8eODlbvhVgywhSbwz6EvEDCDxhDTCde3 +wKq17vZIxDiy2OmC0cnLnA8Mt3c45OxBEnIrrBkCgYBgaR0UQJq/Xfnu+CV8/hV3 +HYpzquWzqWve3DgEGSXA/fAVSm6JhcumndywlBVXXyML+A+U6MVdJfGVbLSHxLQV +1f9nTAwXPbauFLrqpHm0hOvCwfAEkK8HDt2mKOfblbWrLo7gF7wErcSEw7tEqJOg +M2OG+6QXvCsCZUKBf8TnnQ== +-----END RSA PRIVATE KEY----- diff --git a/mobile/plugins/payment/dalianpay/cert/cus_private_key.pem.test b/mobile/plugins/payment/dalianpay/cert/cus_private_key.pem.test new file mode 100644 index 0000000..8a28c0b --- /dev/null +++ b/mobile/plugins/payment/dalianpay/cert/cus_private_key.pem.test @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJgHMGYsspghvP+y +CbjLG43CkZuQ3YJyDcmEKxvmgblITfmiTPx2b9Y2iwDT9gnLGExTDm1BL2A8VzMo +bjaHfiCmTbDctu680MLmpDDkVXmJOqdlXh0tcLjhN4+iDA2KkRqiHxsDpiaKT6MM +BuecXQbJtPlVc1XjVhoUlzUgPCrvAgMBAAECgYAV9saYTGbfsdLOF5kYo0dve1Jx +aO7dFMCcgkV+z2ujKtNmeHtU54DlhZXJiytQY5Dhc10cjb6xfFDrftuFcfKCaLiy +6h5ETR8jyv5He6KH/+X6qkcGTkJBYG1XvyyFO3PxoszQAs0mrLCqq0UItlCDn0G7 +2MR9/NuvdYabGHSzEQJBAMXB1/DUvBTHHH4LiKDiaREruBb3QtP72JQS1ATVXA2v +6xJzGPMWMBGQDvRfPvuCPVmbHENX+lRxMLp39OvIn6kCQQDEzYpPcuHW/7h3TYHY +c+T0O6z1VKQT2Mxv92Lj35g1XqV4Oi9xrTj2DtMeV1lMx6n/3icobkCQtuvTI+Ac +qfTXAkB6bCz9NwUUK8sUsJktV9xJN/JnrTxetOr3h8xfDaJGCuCQdFY+rj6lsLPB +TnFUC+Vk4mQVwJIE0mmjFf22NWW5AkAmsVaRGkAmui41Xoq52MdZ8WWm8lY0BLrl +BJlvveU6EPqtcZskWW9KiU2euIO5IcRdpvrB6zNMgHpLD9GfMRcPAkBUWOV/dH13 +v8V2Y/Fzuag/y5k3/oXi/WQnIxdYbltad2xjmofJ7DbB7MJqiZZD8jlr8PCZPwRN +zc5ntDStc959 +-----END PRIVATE KEY----- diff --git a/mobile/plugins/payment/dalianpay/config/config.php b/mobile/plugins/payment/dalianpay/config/config.php new file mode 100644 index 0000000..2130425 --- /dev/null +++ b/mobile/plugins/payment/dalianpay/config/config.php @@ -0,0 +1,49 @@ + '5503001', + // 'org_num' => '100018380507D2C', + // 商户号 渠道商户号 + 'cusid' => '10147', + // 'cusid' => '563222080502LGB', + // 产品 + 'producp' => 'JX0002', + // 版本 + 'version' => '11', + // 门店号 + 'branchno' => '44', + // 终端号 + 'termcode' => '000000', + // 加密方式 + 'signtype' => 'RSA', + // 渠道公钥 + 'public_key' => dirname(__FILE__) . '/../cert/channel_public_key.pem', + // 商户私钥 + 'private_key' => dirname(__FILE__) . '/../cert/cus_private_key.pem', + + // 统一支付接口 测试地址 + 'pay_url' => 'https://open.dalianpay.cn/payapi/unitorder/pay', + // 统一支付接口 + // 'pay_url' => 'https://epay.dalianpay.cn/payapi/unitorder/pay', + + // 统一扫码接口 测试地址 + 'scan_url' => 'https://open.dalianpay.cn/payapi/unitorder/scanqrpay', + + // 交易撤销 测试地址 + 'cancel_url' => 'https://open.dalianpay.cn/payapi/tranx/cancel', + + // 交易退款 测试地址 + 'refund_url' => 'https://tpay.01pub.com/payapi/tranx/refund', + + // 统一查询接口 测试地址 + 'query_url' => 'https://open.dalianpay.cn/payapi/tranx/query', + + // 订单关闭接口 测试地址 + 'close_url' => 'https://open.dalianpay.cn/payapi/tranx/close', + + 'openid' => '', + + ); + +?> diff --git a/mobile/plugins/payment/dalianpay/demo/cancel.php b/mobile/plugins/payment/dalianpay/demo/cancel.php new file mode 100644 index 0000000..315a524 --- /dev/null +++ b/mobile/plugins/payment/dalianpay/demo/cancel.php @@ -0,0 +1,151 @@ +getConfig(); + // var_dump('
', $config);
+
+	// 接口URL(测试)
+	$api_url = $config['cancel_url'];
+
+// 加个body字段传中文试试
+
+	// 组装交易报文
+	$reqsn_prefix = date('Ymd');
+	$trade_data = array(
+		'orgid' => $config['org_num'],
+		'cusid' => $config['cusid'],
+		'branchno' => $config['branchno'],
+		'termcode' => $config['termcode'],
+		'version' => $config['version'],
+		'trxamt' => '1',
+		'reqsn' => uniqid($reqsn_prefix),
+		'producp' => 'JX0002',
+		'transtype' => 'JSP511',
+		'randomstr' => md5( uniqid() ),
+        // 'oldreqsn' => '2023072464be31055e0e0',
+        'oldtrxid' => '100000018608497',
+	);
+
+	// $trade_data = array(
+	// 	"cusid" => "10147",
+	// 	"branchno" => "44",
+	// 	"termcode" => "000000",
+	// 	"version" => "11",
+	// 	"trxamt" => "1154634",
+	// 	"reqsn" => "112094120001088317",
+	// 	"producp" => "JX0002",
+	// 	"transtype" => "JSP501",
+	// 	"paytype" => "W01",
+	// 	"randomstr" => md5( uniqid() ),
+	// 	"body" => "",
+	// 	"remark" => "",
+	// 	"validtime" => "",
+	// 	"acct" => "",
+	// 	"notify_url" => "",
+	// 	"limit_pay" => "",
+	// 	"sub_appid" => "",
+	// 	"goods_tag" => "",
+	// 	"benefitdetail" => "",
+	// 	"chnlstoreid" => "",
+	// 	"extendparams" => "",
+	// 	"cusip" => "",
+	// 	"front_url" => "",
+	// 	"subbranch" => "",
+	// 	"idno" => "",
+	// 	"truename" => "",
+	// 	"asinfo" => "",
+	// 	"fqnum" => "",
+	// 	"unpid" => "",
+	// 	"terminfo" => "",
+	// 	// 其他参数...
+	// );
+
+	// $trade_data = array(
+	// 	"appid"=>"00000051",
+	// 	"cusid"=>"990581007426001",
+	// 	"randomstr"=>"82712208",
+	// 	"signtype"=>"RSA",
+	// 	"trxid"=>"112094120001088317",
+	// 	"version"=>"11",
+	// );
+
+	// 生成签名
+	$sign = $Base->Crypt->makeSign($trade_data);
+	if($sign === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[sign]: {$sign}";
+	// die();
+
+	// 加密交易报文
+	$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+	if($crypted_trade_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[crypted message]: {$crypted_trade_data}";
+	// die();
+
+	// 发送报文
+	echo "\r\n";
+	var_dump($api_url);
+	$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+	if($response === false)
+	{
+		echo $Base->Request->err_msg;
+		die();
+	}
+
+	echo "\r\n";
+
+	echo "[response message]: {$response}";
+
+	// 解析响应报文
+	$response = json_decode($response, true);
+	$response_data_crypted = $response['data'];
+	$response_sign = $response['sign'];
+	echo "\r\n";
+	echo "[response sign]: {$response_sign}";
+	echo "\r\n";
+	echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+	// 解密响应密文
+	$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+	if($response_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	// $response_data = mb_convert_encoding($response_data, 'UTF-8', 'GBK');
+	echo "[response data(clear text)]: {$response_data}";
+	// die();
+
+?>
+
+
+
+
+
+
+
+	
+		
+		交易撤销Demo
+		
+	
+	
+
diff --git a/mobile/plugins/payment/dalianpay/demo/close.php b/mobile/plugins/payment/dalianpay/demo/close.php
new file mode 100644
index 0000000..dde0178
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/demo/close.php
@@ -0,0 +1,99 @@
+getConfig();
+	// var_dump('
', $config);
+
+	// 接口URL(测试)
+	$api_url = $config['close_url'];
+
+    // 加个body字段传中文试试
+
+	// 组装交易报文
+	$reqsn_prefix = date('Ymd');
+	$trade_data = array(
+		'orgid' => $config['org_num'],
+		'cusid' => $config['cusid'],
+		'branchno' => $config['branchno'],
+		'termcode' => $config['termcode'],
+		'version' => $config['version'],
+		'randomstr' => md5( uniqid() ),
+		'oldtrxid' => '100000018608526',
+	);
+
+	// 生成签名
+	$sign = $Base->Crypt->makeSign($trade_data);
+	if($sign === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[sign]: {$sign}";
+	// die();
+
+	// 加密交易报文
+	$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+	if($crypted_trade_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[crypted message]: {$crypted_trade_data}";
+	// die();
+
+	// 发送报文
+	echo "\r\n";
+	var_dump($api_url);
+	$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+	if($response === false)
+	{
+		echo $Base->Request->err_msg;
+		die();
+	}
+
+	echo "\r\n";
+
+	echo "[response message]: {$response}";
+
+	// 解析响应报文
+	$response = json_decode($response, true);
+	$response_data_crypted = $response['data'];
+	$response_sign = $response['sign'];
+	echo "\r\n";
+	echo "[response sign]: {$response_sign}";
+	echo "\r\n";
+	echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+	// 解密响应密文
+	$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+	if($response_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[response data(clear text)]: {$response_data}";
+	// die();
+
+?>
+
+
+
+
+	
+		
+		订单关闭Demo
+		
+	
+	
+
diff --git a/mobile/plugins/payment/dalianpay/demo/dalianpay.php b/mobile/plugins/payment/dalianpay/demo/dalianpay.php
new file mode 100644
index 0000000..2b1c564
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/demo/dalianpay.php
@@ -0,0 +1,165 @@
+decrypt($_GET['openid']);
+		// $reqsn = $_GET['reqsn'];
+		// $trxamt = $_GET['trxamt'];
+
+		$openid = $this->decrypt($openid_crypt);
+		$reqsn = $order_sn;
+		$trxamt = $order_amount;
+		
+		// var_dump($openid);
+		// var_dump($reqsn);
+		// var_dump($trxamt);
+		$redirect_url = $_SESSION['prev_url'];
+		// unset($_SESSION['prev_url']);
+		// var_dump($redirect_url);
+
+		// 加载基础类
+		require_once('../library/Base.php');
+		$Base = new Base();
+
+		// 获取配置信息
+		$config = $Base->getConfig();
+		// var_dump('
', $config);
+
+		// 接口URL(测试)
+		$api_url = $config['pay_url'];
+		// $api_url = $_POST['url'];
+		$message = array(
+			"url"=>$api_url,
+		);
+		// echo json_encode($message,true);
+		// 加个body字段传中文试试
+
+		// 组装交易报文
+		$reqsn_prefix = date('Ymd');
+		// var_dump("uniq_id(reqsn)");
+		// echo "\r\n";
+		// var_dump(uniqid($reqsn_prefix));
+		$trade_data = array(
+			'orgid' => $config['org_num'],
+			'cusid' => $config['cusid'],
+			'branchno' => $config['branchno'],
+			// 'termcode' => $config['termcode'],
+			'version' => $config['version'],
+			'trxamt' => $trxamt,  // total_fee
+			'reqsn' => $reqsn, // 交易订单号
+			'producp' => 'JX0002',
+			'transtype' => 'JSP501', // 微信支付
+			'paytype' => 'W02',  // 微信js支付
+			'randomstr' => md5( uniqid() ),
+			// 'body' => 'pages',
+			'acct' => $openid,
+			// 'notify_url' => '', // 交易结果通知地址
+			// 'sub_appid' => 'wx79343915f99167e6',
+			// 'front_url' => '', // 支付完成跳转
+		);
+		// 生成签名
+		$sign = $Base->Crypt->makeSign($trade_data);
+		if($sign === false)
+		{
+			// echo $Base->Crypt->err_msg;
+			$errorMessage = array(
+				"data"=>"makeSign error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+
+		// echo "\r\n";
+		// echo "[sign]: {$sign}";
+
+		// 加密交易报文
+		$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+		if($crypted_trade_data === false)
+		{
+			// echo $Base->Crypt->err_msg;
+			$errorMessage = array(
+				"data"=>"encryptTradeData error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+
+		// echo "\r\n";
+		// echo "[crypted message]: {$crypted_trade_data}";
+
+		// 发送报文
+		// echo "\r\n";
+		// var_dump($api_url);
+		$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+		echo $response;
+		if($response === false)
+		{
+			// echo $Base->Request->err_msg;
+			$errorMessage = array(
+				"data"=>"send error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+		// echo "\r\n";
+		// echo "[response message]: {$response}";
+
+		// 解析响应报文
+		$response = json_decode($response, true);
+		$response_data_crypted = $response['data'];
+		$response_sign = $response['sign'];
+		// echo "\r\n";
+		// echo "[response sign]: {$response_sign}";
+		// echo "\r\n";
+		// echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+		
+		// 解密响应密文
+		$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+		if($response_data === false)
+		{
+			// echo $Base->Crypt->err_msg;
+			$errorMessage = array(
+				"data"=>"decryptTradeData error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+		// echo "\r\n";
+		// echo "[response data(clear text)]: {$response_data}";
+		// die();
+		var_dump(json_decode($response_data));
+		$_SESSION['response_data_json'] = $response_data;
+		return $response_data;
+
+		// var_dump($_SESSION['user_id']);
+		// 跳回之前的地址
+		// header('Location: ' . $redirect_url);
+		// exit;
+	}
+}
+	
+?>
+
diff --git a/mobile/plugins/payment/dalianpay/demo/pay.php b/mobile/plugins/payment/dalianpay/demo/pay.php
new file mode 100644
index 0000000..b97f9f1
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/demo/pay.php
@@ -0,0 +1,162 @@
+getConfig();
+		// var_dump('
', $config);
+
+		// 接口URL(测试)
+		$api_url = $config['pay_url'];
+		// $api_url = $_POST['url'];
+		$message = array(
+			"url"=>$api_url,
+		);
+		// echo json_encode($message,true);
+		// 加个body字段传中文试试
+
+		// 组装交易报文
+		$reqsn_prefix = date('Ymd');
+		// var_dump("uniq_id(reqsn)");
+		// echo "\r\n";
+		// var_dump(uniqid($reqsn_prefix));
+		$trade_data = array(
+			'orgid' => $config['org_num'],
+			'cusid' => $config['cusid'],
+			'branchno' => $config['branchno'],
+			// 'termcode' => $config['termcode'],
+			'version' => $config['version'],
+			'trxamt' => $trxamt,  // total_fee
+			'reqsn' => $reqsn, // 交易订单号
+			'producp' => 'JX0002',
+			'transtype' => 'JSP501', // 微信支付
+			'paytype' => 'W02',  // 微信js支付
+			'randomstr' => md5( uniqid() ),
+			// 'body' => 'pages',
+			'acct' => $openid,
+			// 'notify_url' => '', // 交易结果通知地址
+			// 'sub_appid' => 'wx79343915f99167e6',
+			// 'front_url' => '', // 支付完成跳转
+		);
+		// 生成签名
+		$sign = $Base->Crypt->makeSign($trade_data);
+		if($sign === false)
+		{
+			// echo $Base->Crypt->err_msg;
+			$errorMessage = array(
+				"data"=>"makeSign error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+
+		// echo "\r\n";
+		// echo "[sign]: {$sign}";
+
+		// 加密交易报文
+		$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+		if($crypted_trade_data === false)
+		{
+			// echo $Base->Crypt->err_msg;
+			$errorMessage = array(
+				"data"=>"encryptTradeData error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+
+		// echo "\r\n";
+		// echo "[crypted message]: {$crypted_trade_data}";
+
+		// 发送报文
+		// echo "\r\n";
+		// var_dump($api_url);
+		$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+		echo $response;
+		if($response === false)
+		{
+			// echo $Base->Request->err_msg;
+			$errorMessage = array(
+				"data"=>"send error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+		// echo "\r\n";
+		// echo "[response message]: {$response}";
+
+		// 解析响应报文
+		$response = json_decode($response, true);
+		$response_data_crypted = $response['data'];
+		$response_sign = $response['sign'];
+		// echo "\r\n";
+		// echo "[response sign]: {$response_sign}";
+		// echo "\r\n";
+		// echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+		
+		// 解密响应密文
+		$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+		if($response_data === false)
+		{
+			// echo $Base->Crypt->err_msg;
+			$errorMessage = array(
+				"data"=>"decryptTradeData error..."
+			);
+			return json_encode($errorMessage,true);
+			die();
+		}
+		// echo "\r\n";
+		// echo "[response data(clear text)]: {$response_data}";
+		// die();
+		var_dump(json_decode($response_data));
+		$_SESSION['response_data_json'] = $response_data;
+		return $response_data;
+
+		// var_dump($_SESSION['user_id']);
+		// 跳回之前的地址
+		// header('Location: ' . $redirect_url);
+		// exit;
+	}
+
+	// return pay();
+?>
+
diff --git a/mobile/plugins/payment/dalianpay/demo/query.php b/mobile/plugins/payment/dalianpay/demo/query.php
new file mode 100644
index 0000000..3611b3f
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/demo/query.php
@@ -0,0 +1,98 @@
+getConfig();
+	// var_dump('
', $config);
+
+	// 接口URL(测试)
+	$api_url = $config['query_url'];
+
+    // 加个body字段传中文试试
+
+	// 组装交易报文
+	$reqsn_prefix = date('Ymd');
+	$trade_data = array(
+		'orgid' => $config['org_num'],
+		'cusid' => $config['cusid'],
+		'version' => $config['version'],
+		// 'reqsn' => '2023072464be320f45f2a',
+        'trxid' => '100000018608526', // 渠道交易流水号 如果返回的有 优先使用
+		'randomstr' => md5( uniqid() ),
+	);
+
+	// 生成签名
+	$sign = $Base->Crypt->makeSign($trade_data);
+	if($sign === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[sign]: {$sign}";
+	// die();
+
+	// 加密交易报文
+	$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+	if($crypted_trade_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[crypted message]: {$crypted_trade_data}";
+	// die();
+
+	// 发送报文
+	echo "\r\n";
+	var_dump($api_url);
+	$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+	if($response === false)
+	{
+		echo $Base->Request->err_msg;
+		die();
+	}
+
+	echo "\r\n";
+
+	echo "[response message]: {$response}";
+
+	// 解析响应报文
+	$response = json_decode($response, true);
+	$response_data_crypted = $response['data'];
+	$response_sign = $response['sign'];
+	echo "\r\n";
+	echo "[response sign]: {$response_sign}";
+	echo "\r\n";
+	echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+	// 解密响应密文
+	$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+	if($response_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[response data(clear text)]: {$response_data}";
+	// die();
+
+?>
+
+
+
+
+	
+		
+		统一查询Demo
+		
+	
+	
+
diff --git a/mobile/plugins/payment/dalianpay/demo/refund.php b/mobile/plugins/payment/dalianpay/demo/refund.php
new file mode 100644
index 0000000..a3832bd
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/demo/refund.php
@@ -0,0 +1,105 @@
+getConfig();
+	// var_dump('
', $config);
+
+	// 接口URL(测试)
+	$api_url = $config['refund_url'];
+
+// 加个body字段传中文试试
+
+	// 组装交易报文
+	$reqsn_prefix = date('Ymd');
+	$trade_data = array(
+		// 'orgid' => $config['org_num'],
+		'cusid' => $config['cusid'],
+		'branchno' => $config['branchno'],
+		// 'termcode' => $config['termcode'],
+		'version' => $config['version'],
+		'trxamt' => '1',
+		'reqsn' => uniqid($reqsn_prefix),
+		'producp' => 'JX0002',
+		'transtype' => 'JSP511',
+		'randomstr' => md5( uniqid() ),
+        // 'oldreqsn' => '100000018608489',
+		'oldtrxid' => '100000018608532',
+	);
+
+	// 生成签名
+	$sign = $Base->Crypt->makeSign($trade_data);
+	if($sign === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[sign]: {$sign}";
+	// die();
+
+	// 加密交易报文
+	$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+	if($crypted_trade_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[crypted message]: {$crypted_trade_data}";
+	// die();
+
+	// 发送报文
+	echo "\r\n";
+	var_dump($api_url);
+	$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+	if($response === false)
+	{
+		echo $Base->Request->err_msg;
+		die();
+	}
+
+	echo "\r\n";
+
+	echo "[response message]: {$response}";
+
+	// 解析响应报文
+	$response = json_decode($response, true);
+	$response_data_crypted = $response['data'];
+	$response_sign = $response['sign'];
+	echo "\r\n";
+	echo "[response sign]: {$response_sign}";
+	echo "\r\n";
+	echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+	// 解密响应密文
+	$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+	if($response_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[response data(clear text)]: {$response_data}";
+	// die();
+
+?>
+
+
+
+
+
+	
+		
+		统一扫码Demo
+		
+	
+	
+
diff --git a/mobile/plugins/payment/dalianpay/demo/scan.php b/mobile/plugins/payment/dalianpay/demo/scan.php
new file mode 100644
index 0000000..ddde468
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/demo/scan.php
@@ -0,0 +1,158 @@
+getConfig();
+	// var_dump('
', $config);
+
+	// 接口URL(测试)
+	$api_url = $config['scan_url'];
+
+// 加个body字段传中文试试
+
+	// 组装交易报文
+	$reqsn_prefix = date('Ymd');
+    $terminfo = array(
+        "termsn"=>"dfjskljioe13238023",
+        "longitude"=>"+37.12",
+        "latitude"=>"-37.12",
+        "termno"=>"00000001",
+        "devicetype"=>"04",
+    );
+	$trade_data = array(
+		'orgid' => $config['org_num'],
+		'cusid' => $config['cusid'],
+		'branchno' => $config['branchno'],
+		'termcode' => $config['termcode'],
+		'version' => $config['version'],
+		'trxamt' => '1',
+		'reqsn' => uniqid($reqsn_prefix),
+		'producp' => 'JX0002',
+		'transtype' => 'JSP511',
+		'paytype' => 'W01',
+		'randomstr' => md5( uniqid() ),
+        'terminfo' => json_encode($terminfo),
+        'authcode' => '',
+	);
+
+	// $trade_data = array(
+	// 	"cusid" => "10147",
+	// 	"branchno" => "44",
+	// 	"termcode" => "000000",
+	// 	"version" => "11",
+	// 	"trxamt" => "1154634",
+	// 	"reqsn" => "112094120001088317",
+	// 	"producp" => "JX0002",
+	// 	"transtype" => "JSP501",
+	// 	"paytype" => "W01",
+	// 	"randomstr" => md5( uniqid() ),
+	// 	"body" => "",
+	// 	"remark" => "",
+	// 	"validtime" => "",
+	// 	"acct" => "",
+	// 	"notify_url" => "",
+	// 	"limit_pay" => "",
+	// 	"sub_appid" => "",
+	// 	"goods_tag" => "",
+	// 	"benefitdetail" => "",
+	// 	"chnlstoreid" => "",
+	// 	"extendparams" => "",
+	// 	"cusip" => "",
+	// 	"front_url" => "",
+	// 	"subbranch" => "",
+	// 	"idno" => "",
+	// 	"truename" => "",
+	// 	"asinfo" => "",
+	// 	"fqnum" => "",
+	// 	"unpid" => "",
+	// 	"terminfo" => "",
+	// 	// 其他参数...
+	// );
+
+	// $trade_data = array(
+	// 	"appid"=>"00000051",
+	// 	"cusid"=>"990581007426001",
+	// 	"randomstr"=>"82712208",
+	// 	"signtype"=>"RSA",
+	// 	"trxid"=>"112094120001088317",
+	// 	"version"=>"11",
+	// );
+
+	// 生成签名
+	$sign = $Base->Crypt->makeSign($trade_data);
+	if($sign === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[sign]: {$sign}";
+	// die();
+
+	// 加密交易报文
+	$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
+	if($crypted_trade_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[crypted message]: {$crypted_trade_data}";
+	// die();
+
+	// 发送报文
+	echo "\r\n";
+	var_dump($api_url);
+	$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
+	if($response === false)
+	{
+		echo $Base->Request->err_msg;
+		die();
+	}
+
+	echo "\r\n";
+
+	echo "[response message]: {$response}";
+
+	// 解析响应报文
+	$response = json_decode($response, true);
+	$response_data_crypted = $response['data'];
+	$response_sign = $response['sign'];
+	echo "\r\n";
+	echo "[response sign]: {$response_sign}";
+	echo "\r\n";
+	echo "[response data (ciphertext)]: {$response_data_crypted}";
+
+	// 解密响应密文
+	$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
+	if($response_data === false)
+	{
+		echo $Base->Crypt->err_msg;
+		die();
+	}
+	echo "\r\n";
+	echo "[response data(clear text)]: {$response_data}";
+	// die();
+
+?>
+
+
+
+
+
+
+
+	
+		
+		统一扫码Demo
+		
+	
+	
+
diff --git a/mobile/plugins/payment/dalianpay/library/Base.php b/mobile/plugins/payment/dalianpay/library/Base.php
new file mode 100644
index 0000000..6f11ca4
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/library/Base.php
@@ -0,0 +1,41 @@
+config = require_once('../config/config.php');
+		// 实例化加解密类
+		require_once('Crypt.php');
+		$this->Crypt = new Crypt($this->config);
+		// 实例化请求类
+		require_once('Request.php');
+		$this->Request = new Request($this->config);
+	}
+
+
+	/**
+	 * 获取配置信息
+	 * @return array
+	 */
+	public function getConfig()
+	{
+		return $this->config;
+	}
+
+
+}
+?>
diff --git a/mobile/plugins/payment/dalianpay/library/Crypt.php b/mobile/plugins/payment/dalianpay/library/Crypt.php
new file mode 100644
index 0000000..79c9848
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/library/Crypt.php
@@ -0,0 +1,220 @@
+config = $config;
+	}
+
+
+	/**
+	 * 数据校验
+	 * @param array $data 待校验数据
+	 * @return bool
+	 */
+	private function checkData(array $data)
+	{
+		// 非空校验
+		if( count($data) == 0 )
+		{
+			$this->err_msg = '待签名数据为空';
+			return false;
+		}
+		// 一维数组校验
+		if( count($data) != count($data, 1) )
+		{
+			$this->err_msg = '待签名数据不能是多维数组';
+			return false;
+		}
+
+		return true;
+	}
+
+
+	/**
+	 * 生成签名
+	 * @param array $data 待签名数据
+	 * @return bool|string
+	 */
+	public function makeSign(array $data)
+	{
+		// 数据校验
+		$check_data = $this->checkData($data);
+		if($check_data === false)
+		{
+			return false;
+		}
+
+		// 升序排列
+		ksort($data);
+		// 转字符串
+		$pre_sign_str = http_build_query($data);
+		// echo "[pre_sign_str(jiao yi message)]: {$pre_sign_str}";
+		// die();
+
+		// 读取私钥
+		$private_key = file_get_contents($this->config['private_key']);
+		$private_key = openssl_pkey_get_private($private_key);
+
+		// 私钥签名
+		$res = openssl_sign($pre_sign_str, $sign, $private_key);
+		if($res === false)
+		{
+			$this->err_msg = openssl_error_string();
+			return false;
+		}
+		// 签名转Base64
+		$sign = base64_encode($sign);
+
+		return $sign;
+	}
+
+
+	/**
+	 * 校验签名
+	 * @param array $data 待校验数据
+	 * @param string $sign 签名
+	 * @return bool
+	 */
+	public function checkSign(array $data, string $sign)
+	{
+		// 数据校验
+		$check_data = $this->checkData($data);
+		if($check_data === false)
+		{
+			return false;
+		}
+
+		// 签名转二进制
+		$sign = base64_decode($sign);
+
+		// 升序排列
+		ksort($data);
+		// 转字符串
+		$pre_sign_str = http_build_query($data);
+		$pre_sign_str = urldecode($pre_sign_str);
+		// echo "[pre sign str]: {$pre_sign_str}";
+		// die();
+
+		// 读取公钥
+		$public_key = file_get_contents($this->config['public_key']);
+		$public_key = openssl_pkey_get_public($public_key);
+
+		// 公钥验签
+		$res = openssl_verify($pre_sign_str, $sign, $public_key);
+		if($res === false)
+		{
+			$this->err_msg = openssl_error_string();
+			return false;
+		}
+
+		return $res;
+	}
+
+
+	/**
+	 * 加密交易报文
+	 * @param array $data 待签名数据
+	 * @return bool|string
+	 */
+	public function encryptTradeData(array $data)
+	{
+		// 数据校验
+		$check_data = $this->checkData($data);
+		if($check_data === false)
+		{
+			return false;
+		}
+
+		// 读取公钥
+		$public_key = file_get_contents($this->config['public_key']);
+		$public_key = openssl_pkey_get_public($public_key);
+		// 公钥长度(bit)
+		$public_key_info = openssl_pkey_get_details($public_key);
+		$public_key_bit = $public_key_info['bits'];
+		// 数据长度(数据长度=密钥字节数-11,11为OPENSSL_PKCS1_PADDING的填充长度)
+		$data_length = $public_key_bit / 8 - 11;
+
+		// 待加密数据转json
+		$pre_encrypt_data = json_encode($data, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
+		// 按密钥长度拆分数据
+		$pre_encrypt_data_arr = str_split($pre_encrypt_data, $data_length);
+		// 分段公钥加密
+		$crypted_data = '';
+		foreach($pre_encrypt_data_arr as $key=>$val)
+		{
+			$res = openssl_public_encrypt($val, $crypted_data_tmp, $public_key, OPENSSL_PKCS1_PADDING);
+			if($res === false)
+			{
+				$this->err_msg = openssl_error_string();
+				return false;
+			}
+			$crypted_data .= $crypted_data_tmp;
+		}
+		// 加密结果转Base64
+		$crypted_data = base64_encode($crypted_data);
+
+		return $crypted_data;
+	}
+
+
+	/**
+	 * 解密交易报文
+	 * @param string $data 加密的交易报文
+	 * @return bool|array
+	 */
+	public function decryptTradeData($data)
+	{
+		// 加密数据转二进制
+		$pre_decrypt_data = base64_decode($data);
+
+		// 读取私钥
+		$private_key = file_get_contents($this->config['private_key']);
+		$private_key = openssl_pkey_get_private($private_key);
+		// 私钥长度(bit)
+		$private_key_info = openssl_pkey_get_details($private_key);
+		$private_key_bit = $private_key_info['bits'];
+		// 数据长度(数据长度=密钥字节数,解密时无需考虑OPENSSL_PKCS1_PADDING的填充占位)
+		$data_length = $private_key_bit / 8;
+
+		// 按密钥长度拆分数据
+		$pre_decrypt_data_arr = str_split($pre_decrypt_data, $data_length);
+		// 分段私钥解密
+		$decrypted_data = '';
+		foreach($pre_decrypt_data_arr as $key=>$val)
+		{
+			$res = openssl_private_decrypt($val, $decrypted_data_tmp, $private_key, OPENSSL_PKCS1_PADDING);
+			if($res === false)
+			{
+				$this->err_msg = openssl_error_string();
+				return false;
+			}
+			$decrypted_data .= $decrypted_data_tmp;
+		}
+		// 解密结果编码转换(JAVA处理后的中文一般为GBK编码)
+		// echo "\r\n";
+		// var_dump($decrypted_data);
+		$charset = mb_detect_encoding($decrypted_data); // 这个东西有点问题  解析出来是false 先不用了
+		// echo "\r\n";
+		// var_dump($charset);
+		// echo "\r\n";
+
+		$decrypted_data = mb_convert_encoding($decrypted_data, 'UTF-8', 'GBK');
+		// echo "\r\n";
+		// var_dump($decrypted_data);
+		return $decrypted_data;
+	}
+
+
+}
+
+?>
diff --git a/mobile/plugins/payment/dalianpay/library/Request.php b/mobile/plugins/payment/dalianpay/library/Request.php
new file mode 100644
index 0000000..462be96
--- /dev/null
+++ b/mobile/plugins/payment/dalianpay/library/Request.php
@@ -0,0 +1,156 @@
+config = $config;
+	}
+
+
+	/**
+	 * 发送curl请求
+	 * @param string $url  要请求的URL
+	 * @param string $method  请求方法[get|post]
+	 * @param string|array $post_data  请求数据,模拟表单提交时为Array,提交JSON数据时为String
+	 * @param string $data_type  数据类型[form|file|json|xml]
+	 */
+	private function curlRequest($url, $method, $post_data='', $data_type='form')
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		// 请求端口,SSL为443
+		curl_setopt($ch, CURLOPT_PORT, 443);
+		// 为项目内调用设置专用的UA
+		curl_setopt($ch, CURLOPT_USERAGENT, 'Intract cURL');
+		// 设置为不自动输出
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		// 不输出头部
+		curl_setopt($ch, CURLOPT_HEADER, false);
+		// 跳过证书检查
+		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+		
+		// 不从证书中检查SSL加密算法是否存在
+		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		// // 设定SSL版本,1-3切换
+		// curl_setopt($ch, CURLOPT_SSLVERSION, 1);
+
+		// 根据$data_type,选择不同的HTTP Header
+		$data_type = strtolower($data_type);
+		// echo curl_errno($ch);
+		switch($data_type)
+		{
+			case 'form':
+				$header = 'application/x-www-form-urlencoded';
+				break;
+			case 'file':
+				$header = 'multipart/form-data';
+				break;
+			case 'json':
+				$header = 'application/json';
+				break;
+			case 'xml':
+				$header = 'text/xml';
+				break;
+			default:
+				// 默认为form
+				$header = 'application/x-www-form-urlencoded';
+		}
+		$header = array(
+			'Content-type: ' . $header,
+			'Content-length: ' . strlen($post_data)
+		);
+		// 根据不同的提交方式,设置头部和数据
+		$method = strtolower($method);
+		switch($method)
+		{
+			case 'get':
+				break;
+			case 'post':
+				// 设置头部
+				curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+				// 设置POST提交
+				curl_setopt($ch, CURLOPT_POST, true);
+				// 设置POST数据
+				curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
+				break;
+			default:
+				;
+		}
+		// 执行请求
+		$response = curl_exec($ch);
+		// 返回数据
+		$res = array(
+			'status' => 0,
+			'err_msg' => '',
+			'http_code' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
+			'data' => null
+		);
+		if($response === false)
+		{
+			$res['err_msg'] = curl_error($ch);
+		}
+		else
+		{
+			$res['status'] = 1;
+			$res['data'] = $response;
+		}
+		// 关闭连接
+		curl_close($ch);
+
+		return $res;
+	}
+
+
+	/**
+	 * 发送报文
+	 * @param string $url 接口URL
+	 * @param string $data 加密后的数据
+	 * @param string $sign 交易报文签名
+	 * @return bool|string 成功时返回JSON字符串
+	 */
+	public function send($url, $data, $sign)
+	{
+		// var_dump(gettype($url));
+		// echo "\r\n";
+		// if (!($url instanceof string))
+		// {
+		// 	var_dump("url is not a string");
+		// 	return false;
+		// }
+		// 组装通用参数
+		$post_data = array(
+			'data' => $data,
+			// 'data' => urlencode($data),
+			'orgid' => $this->config['org_num'],
+			'signtype' => $this->config['signtype'],
+			'sign' => $sign,
+			// 'sign' => urlencode($sign),
+		);
+		$post_data = json_encode($post_data);
+		// echo "\r\n";
+		// echo "[send message]: {$post_data}";
+
+		// 发送请求
+		$send_res = $this->curlRequest($url, 'post', $post_data, 'json');
+		if($send_res['status'] !== 1)
+		{
+			$this->err_msg = $send_res['err_msg'] . '(HTTP Code: ' . $send_res['http_code'] . ')';
+			return false;
+		}
+
+		return $send_res['data'];
+	}
+
+
+}
+
+?>