• 小程序调用支付功能

    小程序调用支付功能

    完整的小程序支付代码请查看WeiPHP根目录下的weiapp_demo目录

    小程序提供了微信支付接口,但需要后端服务器先调用统一下单接口先下单,得到prepay_id才能支付。

    因此首先我们需要先让后端服务统一下单,下单需要的参数如下

    参数名类型必填说明
    moneyFloat(10,2)单位:元,订单的金额
    bodyString(128)商品描述,格式:商家名称-销售商品类目
    out_trade_noString(32)商户订单号,商户系统内部的订单号,32个字符内、可包含字母
    openidString(128)用户标识

    调用例子:

    1. order: function () {
    2. var url = app.url + 'weiapp/Api/payment&PHPSESSID=' + wx.getStorageSync('PHPSESSID')
    3. var that = this
    4. wx.request({ //让服务器端统一下单,并返回小程序支付的参数
    5. url: url,
    6. data: {
    7. money: 1, //支付1元
    8. openid: wx.getStorageSync('openid')
    9. },
    10. success: function (res) {
    11. if (res.data.status == 0) {//服务器参数返回不正常,显示错误信息
    12. wx.showToast({
    13. title: res.data.msg,
    14. icon: '../../images/icon_wrong.png',
    15. duration: 2000,
    16. })
    17. } else { //服务器参数返回正常,调用小程序支付接口
    18. that.payment(res.data)
    19. }
    20. }
    21. })
    22. },

    后端服务器PHP的payment方法,在这方法里我们指定Home/Service/payok 为异步接收微信的支付结果

    1. function payment()
    2. {
    3. $info = get_pbid_appinfo();
    4. $money = I('money');
    5. $body = I('body');
    6. if (empty($body)) {
    7. // 商家名称-销售商品类目
    8. $body = $info ['public_name'] . '-服务购买';
    9. }
    10. $out_trade_no = I('out_trade_no');
    11. if (empty($out_trade_no)) {
    12. $out_trade_no = date('ymd') . NOW_TIME . rand(100, 999);
    13. }
    14. $openid = I('openid');
    15. if (empty($openid)) {
    16. $token = get_pbid();
    17. $openid = $GLOBALS ['myinfo'] [$token] ['openid'];
    18. }
    19. $appid = $info ['appid'];
    20. $param ['body'] = $body;
    21. $param ['out_trade_no'] = $out_trade_no;
    22. $param ['total_fee'] = $money * 100;
    23. $param ['openid'] = $openid;
    24. $param ['mch_id'] = $info ['mch_id'];
    25. $param ['partner_key'] = $info ['partner_key'];
    26. $param ['attach'] = I('username');
    27. $order = D('weixin/Payment')->weiapp_pay($appid, $param, 'Home/Service/payok');
    28. echo json_url($order);
    29. }

    下完单后返回小程序支付需要的全部参数,直接使用即可

    1. payment: function (data) {
    2. wx.requestPayment({
    3. 'timeStamp': data.timeStamp,
    4. 'nonceStr': data.nonceStr,
    5. 'package': data.package,
    6. 'signType': data.signType,
    7. 'paySign': data.paySign,
    8. success: function (res) { //支付成功,提示用户
    9. wx.showToast({
    10. title: '支付成功',
    11. icon: 'success',
    12. duration: 2000,
    13. })
    14. },
    15. fail: function (res) { //支付失败,提示失败原因
    16. wx.showToast({
    17. title: res.errMsg,
    18. icon: '../../images/icon_wrong.png',
    19. duration: 2000,
    20. })
    21. }
    22. })
    23. }

    要查询微信支付结果,可参考下一章:异步接收支付结果 章节