Dai Chong's blog

建议按照接口文档进行开发,不要直接使用sdk
下面贴上代码为大家一一介绍文档和真实情况的差距:

1
2
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
require './common/payConfig.php';
$key = $payConfig['key'];
$orderData = array(
"appid" => $payConfig['appid'],
'mch_id' => $payConfig['mchid'],
'sub_appid' => $payConfig['sub_appid'],
'sub_mch_id' => $mchid,
'body' => $body,
'attach' => $attach,
'out_trade_no' => $order_id,
'total_fee' => $total_price,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => 'daichongweb.com',
'trade_type' => 'JSAPI',
// 'openid' => $UnionID, 这个是不需要的
'goods_tag' => 'daichong',
'nonce_str' => $this->getNonceStr(),
'sub_openid' => $mini_openid
);
ksort($orderData);
reset($orderData);
$buff = "";
foreach ($orderData as $k => $v)
{
if($k != "sign" && $v != "" && !is_array($v)){
$buff .= ($k . "=" . $v . "&");
}
}
$buff = trim($buff, "&");
$buff = $buff.'&key='.$key;
$signA = strtoupper(MD5($buff));
$orderData['sign'] = $signA;

$xml = $this->arrayToXml($orderData);

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

$result = $this->https_post($url,$xml);
$payArray = (array)simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);

在代码上的差距其实只有一个openid,但是他还是会报错appid和sub_mch_id不匹配,解决这个问题的前提小程序和公众号的主体必须一致,也就是小程序和微信公众号必须在同一个服务商上绑定。绑定方式是在服务商户里找到’服务商功能‘->’特约商户管理‘找到对应商户点击配置

第一步:



第二步:



添加好之后就可以测试支付了,把支付参数返回给前端,啊就完事了!


 评论