php微信小程序支付流程,微信小程序支付流程

支付步骤逻辑:

1. 小程序发起请求预支付

2. 服务端调用接口发起预支付信息

3. 微信小程序调起支付完成支付

1. 小程序发起请求预支付

cc47b1ffa4aad26b2bec185343a86b69.png

2. 服务端调用接口发起预支付信息

服务端接收到请求后,调用微信的api接口,调用成功会得到一个prepay_id 这个就是相当于小程序的预支付id 过程中会生成签名,按照官方文档的实例参数生成即可,如果非必填可选择不填,然后向 api 发送一个xml

wx2421b1c4370ec43b

支付测试

10000100

1add1a30ac87aa2db72f57a2375d8fec

[url]http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php[/url]

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

1415659990

14.23.150.211

1

JSAPI

0CB01533B8C1EF103065174F50BCA001

需要注意sign 生成方式和公众号生成方式一致,下面是PHP生成签名方法, 可根据不同的框架修改,记得修改 key/**

* 生成签名

* @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值

*/

public function MakeSign()

{

//签名步骤一:按字典序排序参数

ksort($this->_prepay);

$string = $this->ToUrlParams();

//签名步骤二:在string后加入KEY

$string = $string . "&key=".WxPayConfig::KEY;

//签名步骤三:MD5加密

$string = md5($string);

//签名步骤四:所有字符转为大写

$result = strtoupper($string);

return $result;

}

/**

* 格式化参数格式化成url参数

*/

public function ToUrlParams()

{

$buff = "";

foreach ($this->values as $k => $v)

{

if($k != "sign" && $v != "" && !is_array($v)){

$buff .= $k . "=" . $v . "&";

}

}

$buff = trim($buff, "&");

return $buff;

}调用统一下单api/**

* 统一下单调取返回值

* @return mixed

* $output['return_code'] 状态码 SUCCESS/FAIL

* $output['return_msg'] 返回信息,如非空,为错误原因 签名失败 参数格式校验错误

* $output['time'] 当前时间戳

* $output['nonceStr'] 随机字符串

* $output['prepay_id'] 预支付id

* $output['sign'] 签名

* */

public function pay_place_order()

{

$xml = '

'.$this->_prepay['appid'].'

'.$this->_prepay['mch_id'].'

'.$this->_prepay['nonce_str'].'

'.$this->_prepay['notify_url'].'

'.$this->_prepay['openid'].'

'.$this->_prepay['out_trade_no'].'

'.$this->_prepay['spbill_create_ip'].'

'.$this->_prepay['total_fee'].'

'.$this->_prepay['trade_type'].'

'.$this->MakeSign().'

';

//调用api,自定义对参数进行处理,改请求方式是自定义方式

$xml_result = post_request_https('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);对返回的参数从新生成sign,得到一个新的sign,返回小程序

注意: 生成返回小程序签的名参与生成的签名的字段有下图,记得拼接key ,使用的是调取api 返回的值

3. 微信小程序调起支付完成支付

ff20d8c27fb138912e55f105fdc10b73.png

注意: 支付成功后微信回调通知签名验证,需要的参数是所有返回的参数字段除去sign字段,生成签名 = 返回字段中的sign(签名)

97730dc26ed0b8f0775a27e9cc771ae9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值