微信支付:app支付、公众号支付、扫码支付使用文档。
payment 项目2.x版本 
微信的支付逻辑与支付宝的支付有一些差别。为了让客户端忽略这些差别,统一调用。本sdk做了对应处理。
# SDK调用
微信支付不同接口需要的参数会有差别。请大家在使用接口时,仔细查看文档。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 
 | use Payment\ChargeContext;
 use Payment\Config;
 use Payment\Common\PayException;
 
 
 date_default_timezone_set('Asia/Shanghai');
 
 
 function createPayid()
 {
 return date('Ymdhis', time()).substr(floor(microtime()*1000),0,1).rand(0,9);
 }
 
 
 $payData = [
 "order_no"	=> createPayid(),
 "amount"	=> '0.01',
 "client_ip"	=> '127.0.0.1',
 "subject"	=> '测试支付',
 "body"	=> '支付接口测试',
 "extra_param"	=> '',
 ];
 
 
 $payData['product_id']  = '123456';
 
 
 $payData['openid'] = 'otijfvr2oMz3tXnaQdKKbQeeBmhM';
 
 
 * 包含客户的配置文件
 * 本次 2.0 版本,主要的改变是将配置文件独立出来,便于客户多个账号的情况
 * 已经使用不同方式读取配置文件,如:db  file   cache等
 */
 $wxconfig = [
 'app_id'    => 'wxxxx',
 'mch_id'    => 'xxxx',
 'md5_key'   => 'xxxxxx',
 
 'notify_url'    => 'http://test.helei.com/pay-notify.html',
 'time_expire'	=> '14',
 
 
 'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem',
 'key_path'  => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem',
 ];
 
 
 * 实例化支付环境类,进行支付创建
 */
 $charge = new ChargeContext();
 
 try {
 
 
 $type = Config::WX_CHANNEL_QR;
 
 
 
 
 
 
 $charge->initCharge($type, $wxconfig);
 $ret = $charge->charge($payData);
 } catch (PayException $e) {
 echo $e->errorMessage();exit;
 }
 
 if ($type === Config::WX_CHANNEL_QR) {
 $url = urlencode($ret);
 echo "<img alt='扫码支付' src='http://paysdk.weixin.qq.com/example/qrcode.php?data={$url}' style='width:150px;height:150px;'/>";
 } elseif ($type === Config::WX_CHANNEL_PUB) {
 $json = $ret;
 var_dump($json);exit;
 } elseif (stripos($type, 'wx') !== false) {
 var_dump($ret);
 }
 
 ?>
 
 | 
这里扫码支付与公众号支付分别需要提供不同的参数。请一定注意进行区分。否则调用相应端口会抛出异常。
配置文件
| 参数 | 参数名 | 参数说明 | 是否必须 | 
| app_id | 公众账号ID/应用id | 微信分配的公众账号ID | 是 | 
| mch_id | 商户号 | 微信支付分配的商户号 | 是 | 
| md5_key | 加密的key | 在商户中心设置 | 是 | 
| notify_url | 通知地址 | 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 | 是 | 
| time_expire | 交易过期时间 | 单位为分钟,过期后无法再次支付 | 是 | 
| cert_path | 密钥文件 | 可在微信商户后台中下载 | 否,退款需要 | 
| key_path | 密钥文件 | 可在商户中心下载 | 否,退款需要 | 
这里需要注意的是,app_id,由于微信的三个支付接口,需要对应两个不同的app_id。因此再开发中一定要注意。
请求参数
| 参数 | 参数名 | 参数说明 | 是否必须 | 
| order_no | 订单号 | 平台根据规则生成的订单号,最长64位,要在商户数据库中唯一 | 必须 | 
| amount | 交易总金额 | 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 | 必须 | 
| client_ip | 客户端IP | 用户在创建交易时,该用户当前所使用机器的IP。 | 必须 | 
| subject | 商品名称 | 商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字。 | 必须 | 
| body | 商品描述 | 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。 | 必须 | 
| extra_param | 公用回传参数 | 如果用户请求时传递了该参数,则返回给商户时会回传该参数。 | 可选 | 
| product_id | 商品ID | 扫码支付,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 | 可选 | 
| openid | 用户标识 | 公众号支付,此参数必传,用户在商户appid下的唯一标识。 | 可选 | 
返回值描述
三种支付方式返回值因为处理方式不同,微信方面返回了不同的类型。
- app支付返回了需要调用的数组。调用客户端的方式 查看微信文档
- 扫码支付返回了一个地址。可生成一个二维码,完成支付。
- 公众号支付,返回的是一个json数据。可直接放入微信的sdk完成jsapi调用。