架构之美
架构之美,如蓝图之于建筑师,图画之于画家
支付宝支付接口集成

首先需要商家账号:

https://b.alipay.com/order/serviceIndex.htm

然后需要对所有功能进行签约:

https://app.alipay.com/market/productIndex.htm

比如手机网站支付,收营台支付,在这之前还需要开通即时支付功能。

最后在下载对应支付方式的代码:

这是先介绍手机网站支付

这个功能,可以是用户在网页上登录支付宝然后进行支付(所以说手机或者pc都可以支付的)。手机网站支付流程介绍网址如下,

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.orjyN7&treeId=193&articleId=105285&docType=1

在这里下载支付demo
https://doc.open.alipay.com/doc2/detail?treeId=60&articleId=103564&docType=1

选择:手机网站支付接口(alipay.wap.create.direct.pay.by.user)

为了简洁快速可是选择demo里面的md5支付。


这是使用的thinkphp框架,下面是集成了alipay的代码:

// 移动网站支付
private function wappay($order){
	// Vendor('Alipay.alipay#config'); // ALIPAY_CONFIG
	$alipay_config = C('ALIPAY_CONFIG');
	Vendor('Alipay.lib.alipay_core#function');
	Vendor('Alipay.lib.alipay_md5#function');
	Vendor('Alipay.lib.alipay_submit#class');

	/**************************请求参数**************************/
	//商户订单号,商户网站订单系统中唯一订单号,必填
	$out_trade_no = $order['id'].'-'.time();
	$subject = $order['title']; //订单名称,必填
	$total_fee = $order['price']; //付款金额,必填
	$show_url = $order['url']; //收银台页面上,商品展示的超链接,必填
	$body = $order['remark']; //商品描述,可空
	$return_url = $order['jumpurl'] ?  $order['jumpurl'] : $alipay_config['return_url'];
	/************************************************************/

	//构造要请求的参数数组,无需改动
	$parameter = array(
		"service"       => $alipay_config['service'],
		"partner"       => $alipay_config['partner'],
		"seller_id"  => $alipay_config['seller_id'],
		"payment_type"	=> $alipay_config['payment_type'],
		"notify_url"	=> $alipay_config['notify_url'],
		"return_url"	=> $return_url,
		"_input_charset"	=> trim(strtolower($alipay_config['input_charset'])),
		"out_trade_no"	=> $out_trade_no,
		"subject"	=> $subject,
		"total_fee"	=> $total_fee,
		"show_url"	=> $show_url,
		"body"	=> $body,
		//其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.2Z6TSk&treeId=60&articleId=103693&docType=1
        //如"参数名"	=> "参数值"   注:上一个参数末尾需要“,”逗号。
	);
	//建立请求
	$alipaySubmit = new \AlipaySubmit($alipay_config);

	$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
	return $html_text;
}

// 网站支付 收银台
private function webpay($order){
	// Vendor('Alipay.alipay#config'); // ALIPAY_CONFIG
	$alipay_config = C('ALIPAY_CONFIG');
	$alipay_config['service'] = 'create_direct_pay_by_user';
	Vendor('Alipay.lib.alipay_core#function');
	Vendor('Alipay.lib.alipay_md5#function');
	Vendor('Alipay.lib.alipay_submit#class');

	/**************************请求参数**************************/
	//商户订单号,商户网站订单系统中唯一订单号,必填
	$out_trade_no = $order['id'].'-'.time();
	$subject = $order['title']; //订单名称,必填
	$total_fee = $order['price']; //付款金额,必填
	$show_url = $order['url']; //收银台页面上,商品展示的超链接,必填
	$body = $order['remark']; //商品描述,可空
	$alipay_config['return_url'] = $order['jumpurl'] ?  $order['jumpurl'] : $alipay_config['return_url'];
	/************************************************************/
	$parameter = array(
		"service"       => $alipay_config['service'],
		"partner"       => $alipay_config['partner'],
		"seller_id"  => $alipay_config['seller_id'],
		"payment_type"	=> $alipay_config['payment_type'],
		"notify_url"	=> $alipay_config['notify_url'],
		"return_url"	=> $alipay_config['return_url'],
		
		"anti_phishing_key"=>"",
		"exter_invoke_ip"=>"",
		"out_trade_no"	=> $out_trade_no,
		"subject"	=> $subject,
		"total_fee"	=> $total_fee,
		"body"	=> $body,
		"_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
		//其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
        //如"参数名"=>"参数值"
	);
	//建立请求
	$alipaySubmit = new \AlipaySubmit($alipay_config);

	$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
	return $html_text;
}

public function return_url(){
	$alipay_config = C('ALIPAY_CONFIG');
	Vendor('Alipay.lib.alipay_core#function');
	Vendor('Alipay.lib.alipay_md5#function');
	Vendor('Alipay.lib.alipay_notify#class');


	$alipayNotify = new \AlipayNotify($alipay_config);
	$verify_result = $alipayNotify->verifyReturn();
	$this->assign('verify_result', $verify_result ) ;
	$this->display('Uniorder:return_url');
	exit;
}
// 异步通知
public function notify_url(){
	$alipay_config = C('ALIPAY_CONFIG');
	Vendor('Alipay.lib.alipay_core#function');
	Vendor('Alipay.lib.alipay_md5#function');
	Vendor('Alipay.lib.alipay_notify#class');

	//计算得出通知验证结果
	$alipayNotify = new \AlipayNotify($alipay_config);
	$verify_result = $alipayNotify->verifyNotify();
	if($verify_result) {//验证成功
		$out_trade_no = $_POST['out_trade_no']; //商户订单号
		$trade_no = $_POST['trade_no']; //支付宝交易号
		$trade_status = $_POST['trade_status']; //交易状态
	    if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
			// 查询订单
			$id = explode('-', $_POST['out_trade_no']);
			$id = (int)$id[0];
			$one = M('pay_order')->field('state')->where(array('id'=>$id))->find();
			if( !$one ) return;
			if( $one['state'] == 2 ){ echo "success";exit; }
    		redisObj()->Hincrby('pay_urlcount',$one['urlmd5'],1); // 打赏+1
    		
			$wxorder = $re['info'];
			$data = array(
				'id' => $id,
				'state' => 2,
				'callback' => http_build_query($_POST),
				'trade_no' => $_POST['trade_no'],
				'openid' => $_POST['buyer_id'],
				'price_actual' => $_POST['total_fee'],
				'etime' => time()
			);
			M('pay_order')->save($data);
	    }
		echo "success";		//请不要修改或删除
	}
	else {
	    //验证失败
	    echo "fail";
	}
}

这里的alipayconfig为:

'ALIPAY_CONFIG' => array(
	'partner'		=> '88888888', //合作伙伴身份id
	'seller_id'	=> '88888888', //同上合作伙伴身份id
	'key'			=> '123123',   // 合作伙伴MD5密钥
	'notify_url' => "/pay/alipay/notify_url",
	'return_url' => "/pay/alipay/return_url",
	'sign_type'    => strtoupper('MD5'),
	'input_charset'=> strtolower('utf-8'),
	'cacert'    => getcwd().'\\cacert.pem',
	'transport'    => 'http',
	'payment_type' => "1",
	'service' => "alipay.wap.create.direct.pay.by.user",
),

使用商户id和秘钥为合作伙伴身份,查看地址:

https://openhome.alipay.com/platform/keyManage.htm?keyType=partner


以上代码提供了两个函数:手机网站支付和收营台支付。


错误点:

ALI10:系统繁忙,请稍候再试(ALI10)

QQ20160926-1@2x.png

系统繁忙,请稍候再试(ALI10),这是因为传递的参数 title 不能为空

<< 上一篇 Linux kernel 的 sendfile 是如何提高性能的 微信开放平台 - 网页登录 下一篇 >>
文章标签
随意 | Created At 2014 By William Clinton | 蜀ICP备14002619号-4 |