支付宝支付

(由app端自行调起支付宝/微信)

099ad5efc8498a731aef8ee17435b01e.gif

1 <?php

2

3 define(‘IN_ECS’, true);

4

5 /*App支付 PHP服务端*/

6 /*引入支付宝PHP SDK*/

7 header(“Content-type:text/html;charset=utf-8;”);

8 require_once(‘../alipay-sdk-PHP/aop/request/AlipayTradeAppPayRequest.php’);

9 require_once(‘../alipay-sdk-PHP/aop/AopClient.php’);

10

11

12 $user_id = isset($_REQUEST[‘user_id’]) ? trim($_REQUEST[‘user_id’]) : 0;

13 $money = isset($_REQUEST[‘amount’]) ? trim($_REQUEST[‘amount’]) : 0;

14

15 if($user_id == 0 || $money ==0){

16 $result = array(‘code’ => 1,’data’=>’缺少参数’ );

17 die(json_encode($result));

18 }

19

20

21 $aop = new AopClient;

22 $aop->gatewayUrl = “https://openapi.alipay.com/gateway.do”;

23 $aop->appId = “appid”;

24 $aop->format = “json”;

25 $aop->charset = “utf-8”;

26 $aop->signType = “RSA2”;

27 $aop->rsaPrivateKey = ‘开发者私钥’;

28

29 $aop->alipayrsaPublicKey = ‘支付宝公钥’;

30

31

32

33 //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay

34

35 $request = new AlipayTradeAppPayRequest();

36 //SDK已经封装掉了公共参数,这里只需要传入业务参数

37 $trade_no = chongzhi_sn();

38 //入库信息

39 require(dirname(__FILE__) . ‘../../includes/init.php’);

40 include_once(ROOT_PATH .’includes/lib_clips.php’);

41

42 $user_m = get_user_info($user_id);

43

44 $dbcontent = array(

45 ‘user_id’ => $user_id,

46 ‘amount’ => $money,

47 ‘user_name’ => $user_m[‘user_name’],

48 ‘payment’ => “支付宝”,

49 ‘cz_sn’ => $trade_no,

50 ‘add_time’ => gmtime()

51 );

52 //传参信息

53 $bizcontent = array(

54 ‘body’ =>(string)$trade_no,

55 ‘subject’ =>’充值’,

56 ‘total_amount’ => $money,

57 ‘out_trade_no’ => (string)$trade_no,

58 ‘product_code’ => ‘QUICK_MSECURITY_PAY’,

59 ‘timeout_express’=> ’30m’

60 );

61

62 $bizcontent = json_encode($bizcontent);

63 $request->setNotifyUrl(“支付回调地址”);

64 $request->setBizContent($bizcontent);

65 //这里和普通的接口调用不同,使用的是sdkExecute

66 $response = $aop->sdkExecute($request);

67 //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题

68 //echo htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。

69

70 if($response){

71 if($GLOBALS[‘db’]->autoExecute($ecs->table(‘user_chongzhi’), $dbcontent, ‘INSERT’))

72 {

73 $result = array(‘code’=>0,’data’=>$response);

74 }else{

75 $result = array(‘code’=>1,’data’=>’意外出错,请联系客服。’);

76 }

77 die(json_encode($result));

78 }

79

80 function chongzhi_sn()

81 {

82 /* 选择一个随机的方案 */

83 mt_srand((double) microtime() * 1000000);

84 return date(‘Ymd’) . str_pad(mt_rand(1, 99999), 5, ‘0’, STR_PAD_LEFT);

85 }

86

87 ?>

13f28bd7744908b942d100e32e54a490.gif

回调

06de2fe200cd216a59be2544e6debafc.gif

define(‘IN_ECS’, true);

require_once(‘../alipay-sdk-PHP/aop/request/AlipayTradeAppPayRequest.php’);

require_once(‘../alipay-sdk-PHP/aop/AopClient.php’);

$aop = new AopClient;

$aop->alipayrsaPublicKey = ‘支付宝公钥’;

$flag = $aop->rsaCheckV1($_POST, NULL, “RSA2”);

$myfile = fopen(“testfile.txt”, “a”);

fwrite($myfile, “\r\n”);

fwrite($myfile, json_encode($_POST));

if($_POST[‘trade_status’] == ‘TRADE_SUCCESS’ ){

//业务处理

echo ‘success’;

}else{

echo ‘fail’;

}

fclose($myfile);

?>

70dfdf4d75690d5e205c5eed43595741.gif

所需的私钥公钥获取地址

1.私钥 (下载rsa签名验签工具)https://docs.open.alipay.com/291/105971/

e6fc5537b8561d7e9e9caa46fbfe772d.png

2.支付宝公钥

通过上传私钥,由支付宝生成公钥 https://docs.open.alipay.com/291/105972/

a8a4f0a4a6b2f993ce6ea9afeec51f20.png

3.支付宝联调日志排查 https://openmonitor.alipay.com/acceptance/cloudparse.htm