Android 微信支付

做过的微信支付分享一下:


1.首先你去微信开放平台把需要的一些东西都注册好,获取到,如商户账号,appid等,

2.导入微信的libs包libammsdk.jar

3.复制微信的这个包名和这两个类名,要一模一样,这是微信规定的

4.我不知道你们是在哪边要处理的,如果是在前端处理的话,这些字段都要前端自己写,顺便说一下,在前端处理,微信支付的单位是分,所以你要将元转换为分,后端那是后台的事了,你就不用管了:



我是这样处理的,写法不一啊,我这不是绝对的方法,只是参照的

final IWXAPI api = WXAPIFactory.createWXAPI(context, null);//注册微信
api.registerApp(WXconstant.APP_ID);

if(!api.isWXAppSupportAPI())//是否支持当前微信版本支付功能
{
    Utils.showToastShort(context, "当前版本不支持支付功能!");
    return;
}
---------------------------以下是调起微信的代码-----------------------

PayReq payReq = new PayReq();
// 应用id
payReq.appId = WXconstant.APP_ID;
// 商户号
payReq.partnerId = WXconstant.PARENT_ID;
// 预支付交易会话id
payReq.prepayId = map.get("prepay_id");
// 扩展字段
payReq.packageValue = "Sign=WXPay";
// 随机字符串
payReq.nonceStr =map.get("nonce_str");
// 时间戳
String nowTime = getNowTime();
payReq.timeStamp = nowTime;
// 签名
payReq.sign = getSignTwo(nowTime);
api.sendReq(payReq);
 
 用到的方法如下: 

private String getSignTwo(String time) {
    // 第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
    String stringA = "appid=" + WXconstant.APP_ID + "&noncestr=" + map.get("nonce_str") + "&package=" + "Sign=WXPay"
            + "&partnerid=" + WXconstant.PARENT_ID + "&prepayid=" + map.get("prepay_id") + "&timestamp=" + time;
    // 第二步:拼接API密钥:prepay_id
    String stringSignTemp = stringA + "&key=" + WXconstant.WX_KEY;
    return MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase();
}
/**
 * 秒值 1970年 到 现在
 *
 * @return
 */
private String getNowTime() {
    // TODO Auto-generated method stub
    int time = (int) (System.currentTimeMillis() / 1000);
    return String.valueOf(time);
}
有些字段是从后台返回的,最起码的 prepayid......

相对于来说这些都放在后台处理比较安全,所以我们项目中都是在后台处理的,后台返回了一长串的字段,前段基本不用费什么劲了,如:

{"appid":"xxxxxxx","noncestr":"1xxxxxxx","package":"Sign=WXPay","partnerid":"1990393314","prepayid":"sssssss","sign":"AD3832873241CAA86A3FAFA6CEE77C2C",

"timestamp":"1477045950"}


这样相对于前段来说简单了,基本没什么处理的了

然后就是回调了

支付的结果都在这个类WXPayEntryActivity中处理,然后你就跳转到你想要的界面就行

@Override
public void onResp(BaseResp resp) {
    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
        if (resp.errCode == 0) {
            T.show(WXPayEntryActivity.this, "支付成功!");        
            finish();
        } else if (resp.errCode == -2) {
            T.show(WXPayEntryActivity.this, "您已取消支付!");        
            finish();
        } else {
            T.show(WXPayEntryActivity.this, "支付失败!");         
            finish();
        }
    }




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值