[TOC]
## 支付宝原函数
在`AlipaySubmit.class.php` 这个文件中有一个`buildRequestForm` 方法
![mark](http://qiniu.newthink.cc/blog/20171108-095048457.png)
## 变换函数查看源文件
>1、我们只要将 `type="hidden"` 改为 `type="text"`
2、再将`echo $sHtml;die;` 取消注释
3、或将 最后一行的 `$sHtml` 的 `dodument.forms` 注释(可选)
变换后的表单如下:
我们再次访问就得到一个表单
![mark](http://qiniu.newthink.cc/blog/20171108-095417606.png)
## 得到的结果
![mark](http://qiniu.newthink.cc/blog/20171108-110524227.png)
## 格式化源代码
源代码如下:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form id='alipaysubmit' name='alipaysubmit' action='https://mapi.alipay.com/gateway.do?_input_charset='utf-8' method='get'>
<input type='text' name='out_trade_no' value='1510110173'/>
<input type='text' name='partner' value='2088821002087646'/>
<input type='text' name='price' value='2'/>
<input type='text' name='seller_email' value='sxqiboxx@163.com'/>
<input type='text' name='service' value='create_direct_pay_by_user'/>
<input type='text' name='subject' value='测试'/>
<input type='text' name='sign' value='5792d2030d44b9f785457e7b70f3c9ec'/>
<input type='text' name='sign_type' value='MD5'/>
</form>
<script>
document.forms['alipaysubmit'].submit();
</script>
</body>
</html>
```
## 新建文本并访问
注意:这个`sign`值每一次都是变化的,因此不能上述的`html`表单仅用于测试一次,不能多次。如果要调试话,还得需要在`PHP`中调试!
直接访问
![mark](http://qiniu.newthink.cc/blog/20171108-100249336.png)
很奇怪吧,支付就这么搞定了!静态页面支付!哈哈……
## 参数分析
### 每一次的值都是变化的
这个`sign`值每一次都是变化的,因此不能上述的`html`表单仅用于测试一次,不能多次。如果要调试话,还得需要在`PHP`中调试!
```
<input type='text' name='sign' value='e125938b1ab8eb1844a4f247eca6d45a' />
```
### 分析必须元素
#### 总结
>1、提交类配置4个
2、参数数组6个
3、其中两个参数都有(parenter,seller_email)
4、提交时一共有8个参数
#### 1、支付宝各接口请求提交类 (简称:提交类配置)
> 这4个是必须元素
```
$config = [
'partner' => '2088821002087646', // partner 从支付宝商户版个人中心获取
'seller_email' => 'sxqiboxx@163.com', // email 从支付宝商户版个人中心获取
'key' => 'n39lhfdyynkyjdifkkudzuhv8d8ljv34', // key 从支付宝商户版个人中心获取
'sign_type' => strtoupper(trim('MD5')), // 可选md5 和 RSA
];
$alipay=new \AlipaySubmit($config);
```
#### 2、生成要请求给支付宝的参数数组(简称:参数数组)
> 这6个元素是必备的
```
$data=[
//配置中的
"partner" => $config['partner'], // partner 从支付宝商户版个人中心获取
"seller_email" => $config['seller_email'],
//接口名称
"service" => "create_direct_pay_by_user", // 接口名称 固定设置为create_direct_pay_by_user
//自己传参的
"out_trade_no" => $order['out_trade_no'], // 订单号
"price" => $order['price'], // 订单价格单位为元
"subject" => $order['subject'] // 商品名称商品的标题/交易标题/订单标 题/订单关键字等
];
$new=$alipay->buildRequestPara($data);
```
注:这里的 `price` 也可以用 `total_fee` 来代替!
## 生成必须的表单
> 一共 8 个参数!必须 !
```
<form id='alipaysubmit' name='alipaysubmit' action='https://mapi.alipay.com/gateway.do?_input_charset='utf-8' method='get'>
<input type='text' name='out_trade_no' value='1510110173'/>
<input type='text' name='partner' value='2088821002087646'/>
<input type='text' name='price' value='2'/>
<input type='text' name='seller_email' value='sxqiboxx@163.com'/>
<input type='text' name='service' value='create_direct_pay_by_user'/>
<input type='text' name='subject' value='测试'/>
<input type='text' name='sign' value='5792d2030d44b9f785457e7b70f3c9ec'/>
<input type='text' name='sign_type' value='MD5'/>
</form>
<script>
//document.forms['alipaysubmit'].submit();
</script>
```
## 没有哪些参数会报什么错