微信小程序--”来推鉴--投融资项目推荐服务平台“本来是请两个互联网公司的朋友来帮助兼职开发,自己作为产品经理详细提出了项目需求。兼职开发小组一开始还是比较好的进行的前期的工作,完成了对小程序整体UI设计和前期功能开发。但是几个月后就无法再保证开发投入时间,开发进程一拖再拖,配合意愿也不断下降,支付了计划的一半费用后只能终止合作。又找了一个有软件开发经验的朋友来接替,但是还是出现了无法保证开发投入时间的问题,进程还是一拖再拖。所以有产品的想法,希望前期以低成本方式进行,但没有软件开发能力是挺难将一个产品往前推进的。突然有一天,自己想想能不能自己来开发呢。自己确实以前没有开发过一个产品。先找了一门网上python的编程课学了学,又在网易云课堂、B站里逛了逛,发现现在的各类编程的学习视频真得比较丰富,收费和免费的都有。在看过几个教学视频后,慢慢把开发一个微信小程序需要具备的知识体系了解的比较情晰。开始自己把原来开发了20%左右的项目自己捡起来,边理解边修改,一点一点把整个“来推鉴小程序”项目搭了起来。
下面接着第一篇,把微信支付V3的调起支付、接收支付结果通知继续列出基本代码,希望能给有需要的人一些帮助,如有不对的地方也请大神指正。
三、JSAPI调起支付
#前端js
async payFromWx () {
const payInfo =await this.$myRequest({ #从微信支付API返回调起支付的各项参数
url:'/api/payFromWx',
method:'POST',
data:{
price:this.price,
userId:this.userInfo.userId,
},
})
wx.requestPayment({ #主要的五个参数
timeStamp: payInfo.data.timeStamp,
nonceStr: payInfo.data.nonceStr,
package: payInfo.data.package,
signType: "RSA",
paySign: payInfo.data.paySign,
success (res) {
uni.showToast({
title: '微信支付成功,预计5分钟内生效',
icon: 'none'
})
this.getUserInfo()
},
fail (res) {
console.log('fail', res)
}
})
}
完成调起支付
四、接收支付结果通知
[@api_view](/user/api_view)(['POST'])
def payNotify(request): #接收支付通知的接口
#1.获得支付通知的参数
body=request.data
nonce=request.data['resource']['nonce']
ciphertext=request.data['resource']['ciphertext']
associated_data=request.data['resource']['associated_data']
up_time=datetime.datetime.now()
#2.获得支付通知HTTP头参数
Wechatpay_Serial=request.META['HTTP_WECHATPAY_SERIAL']
Wechatpay_Timestamp=request.META['HTTP_WECHATPAY_TIMESTAMP']
Wechatpay_Nonce=request.META['HTTP_WECHATPAY_NONCE']
Wechatpay_Signature=request.META['HTTP_WECHATPAY_SIGNATURE']
print('Wechatpay_Signature',Wechatpay_Signature)
#6.回调报文解密后取得定单号
def decrypt(nonce, ciphertext, associated_data):
key = settings.apiV3Key
key_bytes = str.encode(key)
nonce_bytes = str.encode(nonce)
ad_bytes = str.encode(associated_data)
data = base64.b64decode(ciphertext)
aesgcm = AESGCM(key_bytes)
return aesgcm.decrypt(nonce_bytes, data, ad_bytes)
payment=decrypt(nonce, ciphertext, associated_data)
payment=eval(payment.decode('utf-8'))
transactionNo=payment['out_trade_no']
#7.回调报文签名验证
#同第一篇签名验证的代码
#8.获得回调报文中交易号后修改已支付订单状态
transactionlog=TransactionLogs.objects.get(transaction_no=transactionNo)
transactionlog.transaction_status_id=2
transactionlog.save()
#9.项目业务逻辑
return Response ({"code": "SUCCESS","message": "成功"})
待续未完…
欢迎大家支持下:来推鉴微信公众号