EtoYang
EtoYang
  • 发布:2016-07-01 15:45
  • 更新:2019-05-07 16:44
  • 阅读:5798

Ping++支付的实现

分类:HTML5+

由于项目需要,本人用H5实现了Android版,并成功发布。其中支付是使用的Ping++。
Hbuilder限制支付只能使用支付宝和微信。
但是实际上Ping++支付是直接调用支付宝或微信的,Ping++的作用就是统一了支付请求和回调。所以我们在获得支付申请数据之后,拆分出第三方支付所需要的数据,然后调用第三方支付就可以了。
具体步骤和代码:

  1. 从后台获取支付请求数据,数据示例:
    
    payid = 'alipay'  
    var payReq = {  
      "body": "***订单",  
      "subject": "xxxxxxxxx",  
      "object": "charge",  
      "client_ip": "175.13.62.206",  
      "order_no": "xxxxxxxxx",  
      "currency": "cny",  
      "amount": 100,  
      "id": "ch_ xxxxxxxxx",  
      "failure_code": null,  
      "paid": false,  
      "refunded": false,  
      "created": 1467358041,  
      "description": null,  
      "amount_refunded": 0,  
      "livemode": false,  
      "amount_settle": 100,  
      "metadata": {},  
      "time_paid": null,  
      "app": "app_ xxxxxxxxx",  
      "extra": {},  
      "credential": {  
        "alipay": {  
          "orderInfo": "_input_charset=\"utf-8\"&body=\"***订单\"&it_b_pay=\"2016-07-02 15:27:21\"&notify_url=\"https%3A%2F%2Fapi.pingxx.com%2Fnotify%2Fcharges%2Fch_ xxxxxxxxx\"&out_trade_no=\"xxxxxxxxx\"&partner=\"xxxxxxxxx\"&payment_type=\"1\"&seller_id=\"xxxxxxxxx\"&service=\"mobile.securitypay.pay\"&subject=\"*****\"&total_fee=\"1.00\"&sign=\"SEM0T1MwMWV6SFdUTFN5WDlPOWVqTEtH\"&sign_type=\"RSA\""  
        },  
        "object": "credential"  
      },  
      "time_settle": null,  
      "time_expire": 1467444441,  
      "failure_msg": null,  
      "refunds": {  
        "data": [],  
        "has_more": false,  
        "object": "list",  
        "url": "/v1/charges/ch_xxxx/refunds"  
      },  
      "transaction_no": null,  
      "channel": "alipay"  
    }  
    };  

payid = 'wxpay';
var payReq = {
"body": "*",
"subject": "****
",
"object": "charge",
"client_ip": "175.13.62.206",
"order_no": "xxxxxxxxx",
"currency": "cny",
"amount": 100,
"id": "ch_xx",
"failure_code": null,
"paid": false,
"refunded": false,
"created": 1467358181,
"description": null,
"amount_refunded": 0,
"livemode": false,
"amount_settle": 100,
"metadata": {},
"time_paid": null,
"app": "app_xxx",
"extra": {},
"credential": {
"wx": {
"sign": "xxxxx",
"appId": "xxxxx",
"timeStamp": "1467358181",
"packageValue": "Sign=WXPay",
"partnerId": "123456",
"nonceStr": "11111111111111",
"prepayId": "xxxxxxxxxxxx"
},
"object": "credential"
},
"time_settle": null,
"time_expire": 1467365381,
"failure_msg": null,
"refunds": {
"data": [],
"has_more": false,
"object": "list",
"url": "/v1/charges/ch_xxxxx/refunds"
},
"transaction_no": null,
"channel": "wx"
}
}

2. 转换请求数据  
//-----支付宝支付  
payid = 'alipay';
```javascript  
var order = payReq.credential['alipay'].orderInfo;

//end-----支付宝支付

//-----微信支付
payid = 'wxpay';

var wxData = payReq.credential['wx'];  
var wxPay = {appid:wxData.appId,  
        noncestr:wxData.nonceStr,  
        'package':wxData.packageValue,  
        partnerid:wxData.partnerId,  
        prepayid:wxData.prepayId,  
        timestamp:wxData.timeStamp,  
        sign:wxData.sign};  
var order = JSON.stringify(wxPay);

//end-----微信支付

  1. 调用支付
    callPay(payid, order)
//调用支付  
function callPay(payid, order) {  
    console.log("----- order -----" + JSON.stringify(order));  
    plus.payment.request(pays[payid], order, function(result){  
            console.log("----- 支付成功 -----");  
            mui.toast('支付成功');  
                        //支付成功处理  
            //paySuccess (result);  
                },function(e){  
                    plus.nativeUI.closeWaiting();  
                    console.log("----- 支付失败 -----");  
                    console.log("["+e.code+"]:"+e.message);  
                    plus.nativeUI.alert("支付失败",null,"错误码:"+e.code);  
            });  
}

其他代码请参照H5+示例工程的plus/payment.html 。

2 关注 分享
BoredApe 生如夏花

要回复文章请先登录注册

1***@qq.com

1***@qq.com

还用集成环迅的sdk吗?hbuilder 中能自动帮助集成微信支付的sdk的
2019-05-07 16:44
a***@gmail.com

a***@gmail.com

ping++对应的阿里和微信支付的appid和sercet之类的配置,一个ping++账号对应的是固定的吗?还是说自己先申请微信和支付宝的账号,然后再去ping++绑定账号的这种,而不是ping++给分配appid。
----------------------------
因为如果是ping++分配而不是自己申请,那么配置文件里面的appid我该咋填呀。
2018-12-24 16:01
EtoYang

EtoYang (作者)

回复 生如夏花 :
是这样的, 不好意思回复晚了
2017-04-06 11:54
生如夏花

生如夏花

后台是使用的ping++生成的支付请求数据,然后客户端拿到信息不调用ping++sdk直接调用支付宝对吗?
2016-07-06 11:50
EtoYang

EtoYang (作者)

第一次发帖, 自己顶一下, 排版有点乱.
2016-07-01 15:51