支付宝当面付与网页支付,一个php文件搞定

本文介绍如何在一个PHP文件中实现支付宝的当面付和网页支付功能。由于支付宝当面付不适用于网站,因此转向了网页支付。功能已在沙盒环境下测试通过,适用于TP5框架,支付类存放于extend/payment目录。欲了解更多详情,可以访问作者的博客。
摘要由CSDN通过智能技术生成

欢迎大家访问我的博客 blog.ayla1688.cool


 

最近项目中有使用到支付宝的支付, 原本按照设计,应使用支付宝当面付模块,但是支付宝当面付不能在网站上使用。所以又改用网页支付。以免小伙伴被网上的‘拿来主义’误导。

功能包括:支付宝当面付,支付宝网站支付。

当面付功能均已通过沙盒测试,可放心使用。 TP5框架, 支付类放在extend/payment目录下。

<?php
namespace payment;

use \think\Db;

/**
 *
 * @DateTime 2018-11-16 10:43:44
 * 支付宝支付类
 */
class Alipay {

	//是否沙盒环境
	public $is_sandbox = false;
	//沙盒地址
	private $sandurl = 'https://openapi.alipaydev.com/gateway.do';
	//正式地址
	private $url = 'https://openapi.alipay.com/gateway.do';
	//appid
	private $appid ;
	//商户应用私钥
	private $rsaPrivateKey = '商户设置的私钥';

	//支付宝公钥 验签使用
	private $alipayPublicKey= '支付宝自动生成的公钥';

	private $payment_id;

	private $charset = 'utf-8';

	public function __construct(){
		 
		$payment = Db::name('payment')->where('code', 'alipay')->find();
		$json = json_decode($payment['json'], true);
		$this->appid = $json['appid'];
		$this->payment_id = $payment['id'];
		 
	}

	/**
	 *
	 * @DateTime 2018-11-16 10:57:51
	 * 发起支付
	 */
	public function pay($order_id){

		$time = time();
		if($this->is_sandbox){
			$url = $this->sandurl;
			$this->appid = '2016092000556490';
			$this->rsaPrivateKey = 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCOjfeHwjuAakHIiEbpqGz1aGJQPeOme15v/LFp5Kb8eZ/5kwHLyslGcSizeAIdWK/O80FmvdYOCbcGRMXC2rZ3WT1i4wuHRO0+pWx78gr2AmW7UiKFHQB+XC14AGOywIC/yDPHy7HRdaulx/Hc0PwCZkSE+oMN7aUeg0+eLq0GdGccYlDuhUzHI0liq0OW/sCJaizjW7XXo88TBa+9p1UJQZYhUN1n7W71sk04ipPwd5jhbTlPadS28jqiRE2YZEi/Kv1NHktAzUX61i/XxAUrdYAJ98m+GmqKLIC1aGyzXkuoBRXGyHcKe3JScoEJGHZi7OacK0DzxtONFIJsh0hFAgMBAAECggEBAI23lNzhu0VuXPd+gwDG74sIurQK0sYu3zN1gupC5b8ZKnByNNbkQjRFSrEgHPoPsLeMHPiGwMYz4j/ZHsEXrU346Y3lKRDQ9QnSaobNmRf4Sipu/OJYcqUr/gfOW07ZESWXYeK+HYid8oZcv5VGLUI1aOjKIn82QXCUGhKnVFuU1+g1o1U7/xRAw5aRA7B3ixZoJD5Ti+ILB5WBtbfALe37EcCmri64ZWAtBnGKNxP9q6gnQkv8GSjv7bwf30nUkPc86IZQ89nftpTSIqTgb9KJa8NGUCdpuylmFcUlLaWuh0fFfx2gDk74qiLvWV9O+smuz9Led3gwMirSOyERMAECgYEA7e4LwMLXf6qhNaeYNESMPYJ1bvSCo1zM4ef4kGTxiKWRVnNUnT1nNkZmz3cXviZ+tvcu4LhlVLPoQfWVOMx3SFndSNNHhIkdXRODx0zieXC1+W+j/tRmoEoEVCXhcJrG5q95RTK3WKM6DtjpanxzB3uBfiXwM4565n5N7zCIN0kCgYEAmWGV45356vkNDFiq2L8aQxkcv0pqop1z7w1XQ1U6rgf9tCDwP1Pdp71OGw7WQk6K/W2wmYUrVR2o0EQEeXk9HcWQOHyhfJ21YKZoUfH5Gl26wSVyZWOw41KipRkaZm06LC0NzKsUd33cUsTgnYh2zt60vPNIVv0H3JsUol9n3R0CgYA3SdKnV192RjMx4aEHvEoOXQtm3iChT4Y4lIv5Gcvaoga03RXzd/pM7W0klpsIz68wWx4kkBTT6v50nVmwmiq5wFAghSAgVzBgmZFMtbwG1j8jGGM2ayrx4mFBIJBTd1Py9SGsB839Jeju3E7ZNNQSEAwWQUCg6mH6v6zigReWKQKBgQCI4kZatQntYgb7FcajWSme6DJ3pXo1Vj+5ADb4qH+OASOyNhMy8S3IHXIvQ7aDxoTUV6hb2jUp6SZXd9xmbITWpRJo1xFnnXfZoalIOKMPnMamyTymr6mVtpHgtd6RurlH442FMsk5OuH+HCY5cShWxvqWBqhwubDieKSZpHuVIQKBgEue0vERf88npRrq4R5m2ja3FmbUq/AKqLHuzw4acoMH4FTJTKFKxf/+/AtRQBawkvat+C4duExwHGKGOyJGPdrwbd1DWmqZZ3hE2zaMT/rTZSjC3M4zi8JBwhKnJN8t6I7Ms07mOv0KQyzMm8Jwchk12bQtBrhAmaxnSTmUbSlC';
			$this->alipayPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjo33h8I7gGpByIhG6ahs9WhiUD3jpnteb/yxaeSm/Hmf+ZMBy8rJRnEos3gCHVivzvNBZr3WDgm3BkTFwtq2d1k9YuMLh0TtPqVse/IK9gJlu1IihR0AflwteABjssCAv8gzx8ux0XWrpcfx3ND8AmZEhPqDDe2lHoNPni6tBnRnHGJQ7oVMxyNJYqtDlv7AiWos41u116PPEwWvvadVCUGWIVDdZ+1u9bJNOIqT8HeY4W05T2nUtvI6okRNmGRIvyr9TR5LQM1F+tYv18QFK3WACffJvhpqiiyAtWhss15LqAUVxsh3CntyUnKBCRh2YuzmnCtA88bTjRSCbIdIRQIDAQAB';
		}else {
			$url = $this->url;
		}
		$notify_url = '异步回调';
		$order = Db::name('order')->where('id', $order_id)->find();

		//请求参数的集合 json_encode
		$biz_content = [
			'out_trade_no' => $order['order_unique'],
			//'seller_id' => ''
			'total_amount' => $order['real_total_fee'],
			//'discountable_amount' => '',
			'subject' => $order['body'],
			//'goods_detail' => '',
			//'body' => $order['body'],
			//'operator_id' => '',
			//'store_id' => '',
			//'disable_pay_channels' => '',
			//'enable_pay_channels' => '',
			//'terminal_id'=> '',
			//'extend_params' => '',
			//'timeout_express' => '',
			//'settle_info' => '',
			//'business_params' => '',
			//'qr_code_timeout_express' => '',
 		];

 		//参数
		$param = [
			'app_id' => $this->appid,						//支付宝分配给开发者的应用ID
			'method' => 'alipay.trade.precreate',						//接口名称
			//'format' => 'JSON',						//紧支持JSON
			'charset' => 'utf-8',					//请求使用的编码格式
			'sign_type' => 'RSA2',						//商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
			'sign' => '',								//商户请求参数的签名串
			'timestamp' => date('Y-m-d H:i:s', $time),							//发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"
			'version' => '1.0',								//调用的接口版本,固定为1.0
			'notify_url' => $notify_url,								//支付宝服务器主动通知商户服务器里
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个使用SSM框架实现支付宝当面付功能的简单代码实现: 1.首先需要在支付宝开发平台创建应用并获取应用的APPID、商户私钥和支付宝公钥。 2.在项目中引入alipay-sdk-java依赖包,可以从官网下载或者使用Maven。 3.创建AlipayService接口,实现支付宝当面付的请求和响应功能。 ``` public interface AlipayService { String tradePrecreate(AlipayBean alipayBean) throws AlipayApiException; String getQRCode(String outTradeNo, String imgPath) throws IOException; } ``` 4.实现AlipayServiceImpl类,完成支付宝当面付功能的具体实现。主要包括创建订单、生成二维码等操作。 ``` @Service public class AlipayServiceImpl implements AlipayService { @Autowired private AlipayClient alipayClient; @Autowired private AlipayConfig alipayConfig; @Override public String tradePrecreate(AlipayBean alipayBean) throws AlipayApiException { AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); request.setNotifyUrl(alipayConfig.getNotifyUrl()); request.setBizContent("{" + "\"out_trade_no\":\"" + alipayBean.getOut_trade_no() + "\"," + "\"total_amount\":\"" + alipayBean.getTotal_amount() + "\"," + "\"subject\":\"" + alipayBean.getSubject() + "\"," + "\"timeout_express\":\"" + alipayBean.getTimeout_express() + "\"}"); AlipayTradePrecreateResponse response = alipayClient.execute(request); if (response.isSuccess()) { return response.getQrCode(); } else { throw new AlipayApiException("调用支付宝当面付失败"); } } @Override public String getQRCode(String outTradeNo, String imgPath) throws IOException { AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); request.setBizContent("{" + "\"out_trade_no\":\"" + outTradeNo + "\"}"); AlipayTradeQueryResponse response; try { response = alipayClient.execute(request); if (response.isSuccess()) { BufferedImage image = QrCodeUtil.createImage(response.getQrCode(), imgPath, true); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "png", baos); byte[] bytes = baos.toByteArray(); return Base64.encodeBase64String(bytes); } else { return null; } } catch (AlipayApiException e) { e.printStackTrace(); return null; } } } ``` 以上代码只是一个简单的示例,具体实现还需要考虑错误处理、参数校验等细节问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值